我想缓存查询结果,并且在laravel中阅读了有关Cache :: remember的信息,但是它需要一个时间参数,并且我不想为我的Redis缓存设置时间。
我需要一些东西来缓存我的查询,并且查询更新后,由于更新而更改的结果。
您有什么建议?
答案 0 :(得分:1)
在redis中存储完整的口才模型可能比预期的慢。
在我的情况下,我必须创建包含大量where
,count
,join
,group by
和order by
...等的嵌套选择。
它在每次请求时都消耗了大量资源,因此我尝试缓存结果。这不是最好的解决方案,因为它比我想要的(200毫秒以上的响应)慢(4倍)。
解决方案是通过“巨大”查询SELECT id FROM ...
,并将ID存储在Redis中。此后,每个请求中的SQL查询看起来像SELECT * FROM <table> WHERE id IN (...);
。 (如有必要,对sql查询中的数据重新排序)
通过这种方式,可以快速查询redis和sql所需的数据。平均响应时间小于50毫秒。
我希望这会有所帮助。
答案 1 :(得分:0)
有一个很好的库,但是他们警告说它仅与laravel 5.8兼容。如果可以更新,这是一种方法。如果无法更新laravel,至少您可以阅读代码并尝试遵循相同的方向。
https://github.com/GeneaLabs/laravel-model-caching
此库完全满足您的需求。您可以缓存模型和/或自定义查询,并且每当更新,创建或删除模型时,都可以使该缓存无效。