目前rails最新的支持memcache的client是dalli,它的前身是memcache-client,memcached本身并没有为我们提供针对于某个项目、某个类别的、某个页面的过期机制,在它看来都是内存中的存储。

如果我们有多个应用公用memcached,这时的过期机制就显得尤为重要,因为,我们不能让应用之间互相影响。这时可给每个应用设立名空间,例如:
 
 
  
  1. config.cache_store = :dalli_store'cache-1.example.com''cache-2.example.com'
  2.   { :namespace => NAME_OF_RAILS_APP, :expires_in => 1.day, :compress => true } 


这样各个应用就有自己的过期时间。

另外如果我们想针对个别类亦或者是页面过期,这就需要我们写代码来处理了,比如可以写一个rake或者ruby脚本,

来处理这种过期:例如


 

 
  
  1. namespace :cache do 
  2.   namespace :reset do 
  3.     %w{Category Forum Post}.each do |klass| 
  4.       desc "Clear the #{klass} cache" 
  5.       task klass.underscore.gsub("/","_").pluralize => :environment do 
  6.         klass.constantize.reset_cache 
  7.       end 
  8.     end 
  9.   end 
  10. end 

然后我们就可以在想要清除某些缓存的时候使用rake,而不用重启memcached来做统一的缓存清除