在Heroku上使用Rails 4 + Memcached

Yar*_*rin 9 memcached caching ruby-on-rails heroku

我们需要一个Rails缓存解决方案,它可以在Heroku上使用多个dyno组合.具体来说,我们需要工作人员dynos处理长时间运行的任务来写入我们的web dynos可以读取的缓存.

显然,在dynos中实现共享缓存的唯一方法是使用Memcached.但是,我无法找到有关如何完成此操作的客观指示.(Heroku文档由Memcached附加供应商编写,如MemCachier,正在推广他们的产品.)

我的问题:

  • 是否需要第三方附加组件,或者可以直接在编队内的dyno上实施Memcached?
  • 通过外部服务使用Memcached是否实用?如果Memcached的全部内容是高性能的内存访问,那么外部服务的网络延迟是否会否定这一点?
  • 如果使用附加组件,是否有理由选择MemCachierMemcached Cloud

Ita*_*ber 5

尽职调查 - 我在Redis Labs工作,该公司提供Memcached Cloud插件.

  • 我不熟悉任何直接在dyno上运行任何数据存储/数据库的人 - Heroku和第三方插件正好可用.
  • 是的,使用远程Memcached是使用需要扩展到多个dynos的Web应用程序的常用方法.尽管没有在同一台服务器上进行共存,但您仍然可以在<1毫秒内获得Memcached的响应.
  • 选择能够为您带来最大价值的插件 - 不仅在每美元的RAM方面,而且在稳健性和功能方面 - 请参阅此比较以获取更多信息.


Yar*_*rin 5

(@ItamarHaber回答了这个问题,然后把它卖给了memcached云.只想展示我们是如何实现它的)

使用带有Rails 4的Memcached Cloud附加组件:(Rails 3的指令派生)

将Dalli添加到您的Gemfile:

gem 'dalli'
Run Code Online (Sandbox Code Playgroud)

config/environments/production.rb中设置cache_store :

  # NOTE: ENV vars aren't available during slug comiplation, so must check if they exist:
  if ENV["MEMCACHEDCLOUD_SERVERS"]
    config.cache_store = :mem_cache_store, ENV["MEMCACHEDCLOUD_SERVERS"].split(','), { :username => ENV["MEMCACHEDCLOUD_USERNAME"], :password => ENV["MEMCACHEDCLOUD_PASSWORD"] }
  end
Run Code Online (Sandbox Code Playgroud)

更新:

经过一番研究后,我们意识到Redis可以为我们提供Memcached缓存的所有好处以及一系列其他功能.Memcached Cloud的制造商Redis Labs也提供了Redis Cloud添加功能,它同样易于使用:

在Rails 4中使用Redis Cloud附加组件:

将Redis添加到您的Gemfile:

gem 'redis-rails'
Run Code Online (Sandbox Code Playgroud)

config/environments/production.rb中设置cache_store :

  # NOTE: ENV vars aren't available during slug comiplation, so must check if they exist:
  if ENV["REDISCLOUD_URL"]
    config.cache_store = :redis_store, ENV["REDISCLOUD_URL"], { expires_in: 90.minutes }
  end
Run Code Online (Sandbox Code Playgroud)

  • `:redis_store`的速度与`:mem_cache_store`相比如何? (3认同)