【问题标题】:Manually Clear Fragment Cache in Rails在 Rails 中手动清除片段缓存
【发布时间】:2012-05-13 16:27:16
【问题描述】:

我将 Memcached 与 Heroku 一起用于 Rails 3.1 应用程序。我有一个错误并且显示了错误的东西 - 缓存的参数不正确。

我有这个:

<% cache("foo_header_cache_#{@user.id}") do %> 

我删除了片段缓存并推送到 Heroku,坏数据就消失了。

然后我把它改成:

<% cache("foo_header_cache_#{@foo.id}") do %> 

但是,当我更正参数时,从 @user 到 @foo,旧的 [不正确] 缓存版本再次显示(而不是用正确的数据刷新)。

我怎样才能手动使这个过期,或者以其他方式摆脱这些显示的不良数据?

【问题讨论】:

    标签: ruby-on-rails-3 caching memcached


    【解决方案1】:

    我最终通过进入 rails 控制台并使用以下命令手动清除了整个缓存:

    Rails.cache.clear
    

    【讨论】:

    • John Kloian 的回答允许您使单个片段过期。如果您的网站获得大量流量并依赖缓存,则使所有内容过期可能会导致页面加载速度非常慢或缓存升温时出现超时错误。
    【解决方案2】:

    从 Rails 控制台:

    Rails.cache.delete 'FRAGMENT-NAME'
    

    【讨论】:

    • 这是正确的答案。公认的是用霰弹枪杀死一只苍蝇。
    • 这就是我在 Rails 4.2 中过期片段缓存的方法:Rails.cache.delete(['views', 'FRAGMENT-NAME'])
    【解决方案3】:

    你在这里:

    <% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
    

    参考:
    - How to call expire_fragment from Rails Observer/Model?

    【讨论】:

      【解决方案4】:

      从控制台:

      你可以运行它(即如果你知道 id 是 '1')

      ActionController::Base.new.expire_fragment("foo_header_cache_1")
      

      要使用Rails.cache.delete,您需要知道片段名称。在你的情况下,它会是

      Rails.cache.delete("views/foo_header_cache_1") # Just add 'views/' to the front of the string
      

      如果你有一个使用对象的基于数组的缓存键,例如:

      cache([:foo_header_cache, @user])
      

      那么就可以像这样获取片段名称了

      ActionController::Base.new.fragment_cache_key([:foo_header_cache, @user])
      

      名称包括来自任何对象的idupdated_at 时间(到yyyymmddhhmmss)。类似于“views/foo_header_cache/users/1-20160901021000”

      或者简单地使用数组清除它。

      ActionController::Base.new.expire_fragment([:foo_header_cache, @user])
      

      【讨论】:

      • 我认为这是最准确的答案。经过多次使用后,我认为这比调用 ActionController 模块更简洁:Rails.cache.clear(['views', :foo_header_cache, @user])(至少在 Rails 4.2 中工作)
      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2011-02-20
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多