我已经成功地实现了redis和mysql的结合。在我的应用程序的一个部分,我想我会减少mysql服务器上的负载,并使用redis,直到数据被更改,但是我观察到,当从mysql获取相同的数据时,它仍然比redis快。
这是一个场景。
用户1:10000条记录,一天左右很少有一次改变。
我所做的是将获取这些10k记录的整个对象(大小约为20mb的序列化对象)保存到redis。这个想法是,由于随后的100到1000个请求将只是页面刷新,所以为什么不避免mysql点击并从redis获取这些数据呢。
但是,我观察到,从redis获取这个对象时,比刷新redis和命中mysql查询时花费的时间要长。我原以为redis会更快,或者至少有和mysql一样的速度,但现在不同了。
另外,我还注意到,当从redis获取20mb对象时,php会出现“allowed memory expensed”错误(我知道如何修复),但当从mysql获取相同的数据时,它不会出现任何错误。
是否redis不适合缓存大型对象?还是有别的事?
谢谢
1条答案
按热度按时间j0pj023g1#
redis不适合存储/获取大型对象。在网络/带宽中获取/设置这些对象时,您将受到影响。由于它是单线程的,所以在存储/获取这些大型对象时,其他请求也会受到影响。
如基准文件所述;
ram的速度和内存带宽对于全局性能似乎不那么重要,特别是对于小型对象。为了
large objects (>10 KB)
,它可能会变得引人注目。通常,购买昂贵的快速内存模块来优化redis并不划算。你可以做的是,重新设计你的缓存层
hashes
或者lists
取决于应用程序的查询要求。您可以在这里查询更多信息。我也回答了一个类似的问题