【发布时间】:2019-10-29 17:54:04
【问题描述】:
我想缓存我的查询结果,我在 laravel 中阅读了有关 Cache::remember 的信息,但它需要一个时间参数,我不想为我的 redis 缓存设置时间。
我需要一些东西来缓存我的查询,并且在查询更新后,更新会改变结果。
你有什么建议?
【问题讨论】:
标签: database laravel caching redis
我想缓存我的查询结果,我在 laravel 中阅读了有关 Cache::remember 的信息,但它需要一个时间参数,我不想为我的 redis 缓存设置时间。
我需要一些东西来缓存我的查询,并且在查询更新后,更新会改变结果。
你有什么建议?
【问题讨论】:
标签: database laravel caching redis
在 redis 中存储 eloquent 模型的完整集合可能比预期的要慢。
在我的情况下,我必须创建包含大量 where、count、join、group by 和 order by 等的嵌套选择。
每次请求都会消耗大量资源,所以我尝试缓存结果。这不是最好的解决方案,因为它比我想要的慢(4 倍)(200+ 毫秒响应)。
解决方案是SELECT id FROM ...来自“巨大”的查询并将ID存储在redis中。在此之后,每个请求中的 SQL 查询看起来都像 SELECT * FROM <table> WHERE id IN (...);。 (必要时重新排序sql查询中的数据)
这样可以快速从redis和sql中查询到需要的数据。平均响应时间小于 50 毫秒。
我希望这会有所帮助。
【讨论】:
有一个非常好的库,但他们警告说它只与 laravel 5.8 兼容。如果您可以更新,这是一条路要走。如果更新 laravel 不是一个选项,至少你可以阅读代码并尝试遵循他们所做的相同方向。
https://github.com/GeneaLabs/laravel-model-caching
这个库完全符合您的需要。您可以缓存模型和/或自定义查询,并且可以在模型更新、创建或删除时使该缓存失效。
【讨论】:
Illuminate/x: 5.8.*,因为v0.4.1。 @LolekBolek 使用 Laravel 5.6。如果v0.4.0 足够“聪明”,它会很有用。