Ruby on rails 如何在heroku上使用两个不同的memcache实例

Ruby on rails 如何在heroku上使用两个不同的memcache实例,ruby-on-rails,caching,heroku,ruby-on-rails-3.2,memcached,Ruby On Rails,Caching,Heroku,Ruby On Rails 3.2,Memcached,我将数据库查询结果存储在heroku上的memcache中。我正在heroku上使用插件。例如,如果我在memcache中有一个缓存用户的任务。我是这样做的: def cached_tasks Rails.cache.fetch([:users, id, :tasks], :expires_in => 12.hours) { tasks.to_a } end 这非常好,但我想使用两个不同的memcache实例来存储数据 为什么? 一种是经常使用的,基本上是经常更改数据的,另

我将数据库查询结果存储在heroku上的memcache中。我正在heroku上使用插件。例如,如果我在memcache中有一个缓存用户的任务。我是这样做的:

 def cached_tasks
   Rails.cache.fetch([:users, id, :tasks], :expires_in => 12.hours) { tasks.to_a }  
 end
这非常好,但我想使用两个不同的memcache实例来存储数据

为什么?

一种是经常使用的,基本上是经常更改数据的,另一种是针对大数据对象的,这些对象永远不会更改或很少更改

如何使用两个不同的实例并指定缓存的_任务应存储在memcache_实例_1中,而其他类似的缓存的_映像应存储在memcache_实例_2中

为什么不使用同一个:

因为有时候我需要刷新整个缓存,这也会刷新我不想刷新的大数据


有什么建议吗?

我要做的是尝试定义我正在缓存的东西实际上是需要缓存的东西,或者它实际上需要一些生命有限的持久性

我会让Rails内部缓存系统去做它最擅长的事情:页面、动作和片段缓存,并使用另一个持久性引擎(比如Redis)来保存和维护您提到的那些大对象(实现这个建议是一个完全不同的问题)


请注意,Redis还允许在按键上设置TTL(生存时间),因此它可以提供您想要的这种寿命有限的持久性。

为您的heroku应用程序声明三个新的
env
变量

BIG_MEMCACHIER_SERVERS
BIG_MEMCACHIER_USERNAME
BIG_MEMCACHIER_PASSWORD
config\initializers
目录中添加名为
big_cache.rb
的文件:

module Rails
  def self.big_cache
    @big_cache ||= ActiveSupport::Cache::DalliStore.new(
      (ENV["BIG_MEMCACHIER_SERVERS"] || "").split(","),
      :username => ENV["BIG_MEMCACHIER_USERNAME"],
      :password => ENV["BIG_MEMCACHIER_PASSWORD"])
  end
end
现在,您可以按如下方式访问第二个缓存:

Rails.big_cache.fetch(..)

为什么不把很少变化的大资产作为静态资产来服务呢?你看到上面的评论了吗?@MichaelSzyndel是的。但这些都是特定于用户的,每天我都会有大约400-500个新用户,这就是他们的fb好友列表等数据。检查接受的答案。