有没有办法让一个Rails 3.x应用程序使用两个不同的缓存存储?

时间:2012-04-01 09:57:38

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

在Rails 3.1中,我可以在config/environments/*.yml中指定缓存机制。现在,将其设置为:file_store是缓存Dragonfly图像的好方法,但当然其他所有内容都将缓存为文件(动作,片段等)。

现在,有没有办法让一个应用程序使用两个不同的缓存存储 - 例如,Dragonfly所做的一切都存储在:file_store中,而其他一切都存储在Memcache中?

1 个答案:

答案 0 :(得分:2)

总之,是的。

Rack::Cache separates cache entries into一个MetaStoreEntityStore

  

使用基于内存的存储实现(堆或memcached)   强烈建议MetaStore,而基于磁盘的存储   实现(文件)通常对EntityStore和   使用的内存要少得多。

以下是memcached通过dalli gem建议的Redis配置。

config.cache_store = :dalli_store
config.action_dispatch.rack_cache = {
  :metastore    => Dalli::Client.new,
  :entitystore  => URI.encode("file:#{Rails.root}/tmp/cache/rack/body"),
  :allow_reload => false
}

备用内存存储是@jodosha,您可以使用redis-store@jch进行配置。


根据您问题的标题,人们可能会到达这里寻找一种方法来按照最低延迟的顺序链接多个缓存层。

此功能由cascade-storecustom rails cache store提供,{{3}}是另一个{{3}}。 Rails示例:

config.cache_store = [:cascade_store, :stores => [
  [:memory_store, :size => 5.megabytes, :expires_in => 15.minutes],
  [:mem_cache_store, 'localhost:11211'],
]]