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

Tom*_*ero 7 memcached timeout ruby-on-rails heroku

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

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

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

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

我的conf:

application.rb中

config.cache_store = :dalli_store
Run Code Online (Sandbox Code Playgroud)

production.rb

client = Dalli::Client.new
config.action_dispatch.rack_cache = {
    :metastore    => client,
    :entitystore  => client,
    :allow_reload => false
}
Run Code Online (Sandbox Code Playgroud)

rya*_*ton 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
                    })
Run Code Online (Sandbox Code Playgroud)

- 或者 -

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

宝石文件

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

以及你的 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
                    }
Run Code Online (Sandbox Code Playgroud)