我已经成功地实现了redis和MySQL的组合。 在我的应用程序的一个部分中,我想我应该减少mysql服务器的负载,并使用redis直到数据被更改,但是我观察到当从mysql获取相同的数据时,它仍然比redis更快。
这是一个场景。
用户1:10,000条记录,很少在一天左右发生一次性更改。
我所做的是将获取这些10K记录的整个对象(大小约为20MB的序列化对象)保存到Redis中。 其思想是,由于后续的100到1000个请求将仅仅是页面刷新,所以为什么不避免mysql点击并从Redis获取这些数据呢。
但是,我已经观察到,当从Redis中提取这个对象时,比我刷新Redis并命中mysql查询时要花费更多的时间。 我原以为redis会更快,或者至少有和MySQL一样的速度,但这里不同。
此外,我观察到,当从Redis获取20MB对象时,我的php会出现“允许内存耗尽”错误(我知道如何修复),但当从MySQL获取相同的数据时,它不会出现任何错误。
会不会是Redis不适合缓存巨大的对象? 还是有别的事?
谢谢
Redis不适合存储/获取大型对象。 在网络/带宽中获取/设置这些对象时,您将受到影响。 由于它是单线程的,其他请求在存储/获取这个大对象时也会受到影响。
如基准文件所述;
RAM的速度和内存带宽对于全局性能似乎不那么重要,特别是对于小型对象。 对于大型对象(>10 KB),它可能会变得很明显。 通常,购买昂贵的快速内存模块来优化Redis并不真正划算。
您可能会做的是,根据应用程序的查询需求,使用散列
或列表
重新设计缓存层。 您可以在此查看更多信息。 我也在这里回答了一个类似的问题