【问题标题】:Invalidate a specific model in the Rails cache使 Rails 缓存中的特定模型无效
【发布时间】:2011-09-02 14:43:39
【问题描述】:

我正在使用带有 Memcached 的 Rails 3 来缓存一些模型。当模型更改时,我想使该记录的缓存无效。对于视图片段,我只说expire_fragment("blah")。我如何对我的模型执行此操作?我不想说Rails.cache.clear 而失去整件事。我想要Rails.cache.invalidate("/users/5") 之类的东西。我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    您没有提到模型是在什么时候实际添加到缓存中的。您可以尝试使用 after_save 挂钩使模型缓存失效。

    class Model < AR::Base
    
      after_save :invalidate_cache
    
      private
      def invalidate_cache
         Rails.cache.delete("/users/#{self.id}")
         return true # recommended to return true, as Rails.cache.delete will return false if no cache is found and break the callback chain. 
      end
    end
    

    【讨论】:

    • 谢谢!其实我只是在寻找 Rails.cache.delete 方法。当我检查课程文档以及在控制台中运行 Rails.cache.public_methods.sort 时,我错过了这个人。
    • 但实际上,我徒劳地寻找该方法使我找到了另一种方法,在这两个链接中进行了描述:koziarski.net/archives/2007/5/28/clever-cachingnubyonrails.com/articles/about-this-blog-memcached,而不是直接使缓存无效,您只需添加缓存键的额外内容可确保当对象更改时,您会获得其最新版本。有时这在功能上与使缓存失效相同,但并非总是如此。
    猜你喜欢
    • 2014-05-07
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2018-02-22
    • 2011-06-04
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多