我正在我的 Rails 项目中使用缓存,并希望使特定 url 的缓存过期。我得到以下命令来过期与传递的 URL 对应的片段:
ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/")
我很困惑将此代码放在我的 Rails 项目中的哪个位置,以便在添加文本字段中的 url 并单击过期按钮后立即执行它。
我正在我的 Rails 项目中使用缓存,并希望使特定 url 的缓存过期。我得到以下命令来过期与传递的 URL 对应的片段:
ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/")
我很困惑将此代码放在我的 Rails 项目中的哪个位置,以便在添加文本字段中的 url 并单击过期按钮后立即执行它。
您可能应该考虑另一种方法。模型不应该关心缓存是如何工作的,传统上,整个清扫器方法往往变得复杂、笨拙并且与其余代码不同步。
基本上,您永远不必手动使片段过期。相反,您在模型更新后更改缓存键/url(这样您就有了新版本的新缓存条目)。
现在的普遍看法是使用俄罗斯娃娃缓存方法。该链接指向解释基础知识的文章,即将推出的Rails 4 将包含更好的支持。
这可能是大多数标准 Rails 应用程序的最佳方式。
这ActionController::Caching::Sweeper
是一个很好的方法,它是 Rails 观察者的一部分。
http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html
class MyModelSweeper < ActionController::Caching::Sweeper
observe MyModel
def after_save(object)
expire_fragment('...')
end
end
expire_fragment 不起作用,因为您没有将摘要添加到密钥中。在此处查看 DHH:https ://github.com/rails/cache_digests/issues/35
我已经发布了有关缓存 json 响应的相关答案:https ://stackoverflow.com/a/23783119/252799