【发布时间】:2015-12-24 23:42:03
【问题描述】:
我刚刚开始在生产应用程序中使用缓存来加快速度。我已经阅读了主要的 Rails 指南、各种博客、源代码本身等。但是当谈到片段缓存时,我的头脑仍然不清楚一件简单的事情:
更新对象后销毁缓存时,是只更新单个对象,还是类?我认为只是单个对象。
这是一个例子:
<% @jobs.each do |job| %>
<% cache("jobs_index_table_environment_#{session[:merchant_id]}_job_#{job}") do %>
stuff
<% end %>
<% end %>
我在我的工作索引页面中使用了上面的代码。每一行都呈现了一些用户想要的信息、一些 CSS、可单击以查看单个作业等。
我在我的 Job 类(模型)中写了这个
after_save do
Rails.cache.delete("jobs_index_table_environment_#{merchant_id}_job_#{self}")
end
after_destroy do
Rails.cache.delete("jobs_index_table_environment_#{merchant_id}_job_#{self}")
end
如果单个作业对象被更新或销毁,我希望从缓存中销毁它们,当然,新创建的作业在页面上第一次弹出时会获得自己的缓存键。
我不会用@jobs 做俄罗斯娃娃的事情,因为这是我的“上帝”对象,并且一直在变化。缓存几乎永远不会有帮助,因为集合可能会按分钟变化。
我的理解是否正确,在上面的视图中,如果我将 25 个作业渲染到第一页,我将使用缓存键在我的缓存中获得 25 个对象,然后如果我只更改第一个,它会被缓存value 会被销毁,下次加载作业页面时,它会被重新缓存,而其他 24 个只会从缓存中拉出?
【问题讨论】:
-
如果您阅读终端输出,您将看到“写入片段”或“读取片段”的行。我认为检查出来会帮助你弄清楚你的代码在做什么。
标签: ruby-on-rails ruby-on-rails-3 caching dalli