【发布时间】:2012-11-12 15:44:09
【问题描述】:
我在我们的一个仪表板系统上有一个很长的数据库查询,我想缓存它,因为结果不需要实时准确,但可以从缓存中给出“足够接近”的值。
我希望用户无需等待即可完成此操作。我正在考虑使用类似的东西
Rails.cache.write('my_val', 'val', :expires_in => 60.minutes)
存储这个值,但我不相信它提供了我想要的确切功能。我想打电话给
Rails.fetch('my_val') { create a background task to update my_val; return expired my_val}
似乎 my_val 在过期时已从缓存中删除。有什么方法可以访问这个过期的值,或者可能是另一个可以启用此功能的内置机制?
谢谢。
【问题讨论】:
-
为什么不设置后台任务在过期前更新值呢?这样代码就不必等待了。
-
好吧,如果后台任务已经在运行并且耗时过长,以至于缓存在完成之前就过期了,我想在它继续运行时返回旧值。
-
这是不可行的。一旦缓存过期,该值为 null 并且您无法访问前一个缓存。增加过期时间......或者只是不为缓存条目设置过期时间。这样,该值将始终存在,并且一旦完成运行,您就可以使用后台任务覆盖该值
标签: ruby-on-rails ruby caching