如何从后台进程写入部分缓存并从缓存中读取部分并在rails中呈现它?

时间:2011-03-23 18:22:29

标签: ruby-on-rails caching

与我先前提出的问题有关 How to store a database intensive page into cache from a background process in rails

我想每隔15分钟从后台进程写一个部分缓存。当用户请求进来时,我只能从缓存中读取部分并呈现它,并且永远不会明确地使它过期。

有没有办法真正做到这一点?

谢谢,

1 个答案:

答案 0 :(得分:1)

我认为你想要的是用以下内容读取db查询的结果:

Rails.cache.fetch("key", :expires => 365.days) do
  # db query
end

并通过以下方式从cron作业更新它:

Rails.cache.write("key",
                  # db query
                  )

然后允许你的部分每15分钟(或每次偶数)再生,因为这不是操作的密集部分。

N.B。

  1. 我正在设置:expires => 365.days以防你的配置中设置了默认的到期时间,因为我没有查询如何明确说'never'。
  2. 您需要在获取块中进行查询,而不仅仅是执行读取调用,因此在从未运行过cron作业时(即重新启动后)事情不会中断。也就是说,重启/重启后,用户仍然会在第一次点击页面时等待加载。