使Rails缓存中的特定模型无效

Pau*_*rth 9 memcached caching ruby-on-rails-3

我正在使用Rails 3和Memcached来缓存一些模型.当模型更改时,我想使该记录的缓存无效.有了视图片段,我只想说expire_fragment("blah").我如何使用我的模型做到这一点?我不想说Rails.cache.clear并丢失整件事.我想要类似的东西Rails.cache.invalidate("/users/5").我怎么做?

dex*_*ter 18

您没有提到模型实际添加到缓存的位置.您可以尝试使用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
Run Code Online (Sandbox Code Playgroud)

  • 正如@DenissFedotovs在下面的答案中写道:**请注意**你应该在after_save方法中返回true,不要破坏它!如果找不到密钥,Rails.cache.delete将返回!更多信息请参见官方文档[http://apidock.com/rails/ActiveRecord/Callbacks/after_save](http://apidock.com/rails/ActiveRecord/Callbacks/after_save) (2认同)