【问题标题】:Redis database cache in laravel 5.6laravel 5.6 中的 Redis 数据库缓存
【发布时间】:2019-10-29 17:54:04
【问题描述】:

我想缓存我的查询结果,我在 laravel 中阅读了有关 Cache::remember 的信息,但它需要一个时间参数,我不想为我的 redis 缓存设置时间。

我需要一些东西来缓存我的查询,并且在查询更新后,更新会改变结果。

你有什么建议?

【问题讨论】:

    标签: database laravel caching redis


    【解决方案1】:

    在 redis 中存储 eloquent 模型的完整集合可能比预期的要慢。

    在我的情况下,我必须创建包含大量 wherecountjoingroup byorder by 等的嵌套选择。

    每次请求都会消耗大量资源,所以我尝试缓存结果。这不是最好的解决方案,因为它比我想要的慢(4 倍)(200+ 毫秒响应)。

    解决方案是SELECT id FROM ...来自“巨大”的查询并将ID存储在redis中。在此之后,每个请求中的 SQL 查询看起来都像 SELECT * FROM <table> WHERE id IN (...);。 (必要时重新排序sql查询中的数据)

    这样可以快速从redis和sql中查询到需要的数据。平均响应时间小于 50 毫秒。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      有一个非常好的库,但他们警告说它只与 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 足够“聪明”,它会很有用。
      • 没错!但我想,即使他不能使用它,它也可能会给他一些关于如何实现这一点的想法!
      猜你喜欢
      • 2021-07-02
      • 1970-01-01
      • 2021-10-07
      • 2018-01-30
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多