ruby-on-rails - Rails 缓存,继续存储过期值

标签 ruby-on-rails ruby caching

我在我们的一个仪表板系统上有一个很长的数据库查询,我想缓存它,因为结果不需要实时准确,但可以从缓存中提供“足够接近”的值。

我想在用户无需等待的情况下执行此操作。我正在考虑使用类似的东西

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 在过期时已从缓存中删除。是否有任何方法可以访问此过期值或可能启用此功能的另一种内置机制?

谢谢。

最佳答案

只需这样做:

Rails.cache.write('my_val', 'val')

永不过期

现在运行你的后台作业:

SomeLongJob.process

在 SomeLongJob.process 作业中执行此操作:

def SomeLongJob.process
  some_long_calculation = Blah.calc
  Rails.cache.write('my_val', some_long_calculation)
end

现在读取数据

def get_value
  val = Rails.cache.read('my_val', 'val')
end

关于ruby-on-rails - Rails 缓存,继续存储过期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252112/

相关文章:

ruby-on-rails - 如何将从 s3 检索到的对象写入文件?

ruby-on-rails - "render :nothing => true"返回空的纯文本文件?

ruby-on-rails - Passenger Standalone 不会在触摸 restart.txt 时重新启动

ruby-on-rails - rails rspec -(第二次测试)预期响应为 < :redirect>, 但为 <200>

ruby - Ruby 有元对象协议(protocol)吗?如果没有,是否可以实现一个?

c# - 将存储库模式、缓存和 Web 服务链接在一起

ruby-on-rails - Rails 3用户到Rails 2 : Installing gems without a gemfile?

ruby - 以类似表格的格式输出哈希值

C#:如何在IIS重新启动时执行Ctor函数

node.js - ExpressJS 中缓存如何工作的说明