我已经安装了memcached gem和acts_as_cached插件。
我有几个像
Bike <ActiveRecord :: Base
acts_as_cached
........类
结束的模型
Car <ActiveRecord :: Base
actions_as_cached
.....
end
这样的模型我有更多模型
自行车。get_cache(“键”){Bike.find(...)}
汽车。get_cache(“ key”){Car.find(...)}
即使我维护着不同的键,也可以读取错误的对象而不是必需的对象。
Phusion Passenger通过分叉现有流程来生成新服务器。之后,不同的进程共享代码。一方面,与例如杂种服务器相比,这节省了大量内存。另一方面,如果共享连接未正确重置,这可能会使memcached感到困惑。
当用户会话混合在一起时,我曾经有过类似的经历。真吓人。
有两种解决此问题的方法:
1)将乘客配置为使用“保守生成”而不是“智能生成”。但是比起,您将根本失去共享内存的优势。要么
2)如果乘客产生了新的服务器进程,请确保已重置内存缓存连接。我使用以下代码进行操作。把它放入config/initializers/memcached_reset.rb
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
# Close duplicated memcached connections - they will open themselves
Rails.cache.instance_variable_get(:"@data").try(:reset) if Rails.cache.instance_variable_get(:"@data").respond_to?(:reset)
end
end
end
在此博客文章中找到一个稍有不同的示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句