当Memcachier达到缓存限制时,Heroku请求超时

时间:2013-10-29 18:53:34

标签: ruby-on-rails heroku timeout memcached

我使用Memcachier(Dalli作为客户端)将一个Rails应用程序部署到Heroku。我使用免费附加组件(提供25 MB缓存)。

我们开始接收来自heroku的请求超时,经过调试,我们发现手动刷新Memcachier解决了这个问题。

Memcachier达到接近其限制的水平时会发生超时,例如20 MB(限制为25 MB)。

为什么Memcachier不会随着时间的推移释放缓存空间?是否有缺少配置告诉Memcachier 当缓存达到一定大小时刷新

我的conf:

application.rb中

config.cache_store = :dalli_store

production.rb

client = Dalli::Client.new
config.action_dispatch.rack_cache = {
    :metastore    => client,
    :entitystore  => client,
    :allow_reload => false
}

1 个答案:

答案 0 :(得分:0)

或许尝试更新production.rb以包含socket_timeoutsocket_failure_delay选项。

require 'dalli'
cache = Dalli::Client.new((ENV["MEMCACHIER_SERVERS"] || "").split(","),
                    {:username => ENV["MEMCACHIER_USERNAME"],
                     :password => ENV["MEMCACHIER_PASSWORD"],
                     :failover => true,
                     :socket_timeout => 1.5,
                     :socket_failure_delay => 0.2
                    })

- 或 -

如果您使用 Puma ,则需要安装connection_pool gem。

的Gemfile

gem 'connection_pool'

您的production.rb中的此配置

config.cache_store = :dalli_store,
                    (ENV["MEMCACHIER_SERVERS"] || "").split(","),
                    {:username => ENV["MEMCACHIER_USERNAME"],
                     :password => ENV["MEMCACHIER_PASSWORD"],
                     :failover => true,
                     :socket_timeout => 1.5,
                     :socket_failure_delay => 0.2,
                     :pool_size => 5
                    }