首页 > 解决方案 > Laravel 7:MariaDB 与 Redis 结合,但 Redis 在处理大对象时表现较慢

问题描述

我已经成功实现了redis和mysql的组合。在我的应用程序的一个部分,我认为我会减少 mysql 服务器上的负载并使用 redis,直到数据被更改,但是我观察到从 Mysql 获取相同数据时它仍然比 redis 更快。

这是场景。

User1:10,000 条记录,一天左右很少发生一次更改。

我所做的是将获取这 10K 条记录的整个对象(大小约为 20mb 的序列化对象)保存到 redis。这个想法是,由于随后的 100 到 1000 个请求将只是页面刷新,所以为什么不避免 mysql 命中并从 redis 获取这些数据。

但是,我观察到,当从 Redis 获取此对象时,它比我刷新 redis 并命中 mysql 查询要花费更多时间。我认为 redis 会更快或至少具有类似 mysql 的速度,但这里不同。

此外,我观察到从 Redis 获取 20mb 对象时,我的 php 给出了“允许的内存已用尽”错误(我知道如何修复),但是当从 mysql 获取相同的数据时它不会给出任何错误。

难道 Redis 不适合缓存大对象?或者还有别的什么?

谢谢

标签: phpmysqllaraveleloquentredis

解决方案


Redis 不适合/不适合存储/获取大型对象。在网络/带宽中获取/设置这些对象时,您会受到影响。由于它是单线程的,其他请求在存储/获取这些大对象时也会受到影响。

正如基准文档中所述;

RAM 的速度和内存带宽对于全局性能似乎不太重要,尤其是对于小型对象。对于large objects (>10 KB),它可能会变得引人注目。通常,购买昂贵的快速内存模块来优化 Redis 并不是真正划算的。

您可以做的是,根据hasheslists根据应用程序的查询要求重新设计缓存层。您可以在此处查看更多信息。我也在这里回答了一个类似的问题


推荐阅读