我有一个使用Memcachier(Dalli作为客户端)部署到Heroku的Rails应用程序.我正在使用免费的附加组件(它提供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 }
解决方法
也许尝试更新您的production.rb以包含socket_timeout和socket_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(",:socket_failure_delay => 0.2,:pool_size => 5 }