7

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

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

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

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

我的自信:

应用程序.rb

config.cache_store = :dalli_store

生产.rb

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

1 回答 1

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。

宝石文件

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
                    }
于 2015-12-03T16:30:35.183 回答