在我的系统中,有很多 web servers
分享一个 cache(memcache) server
.
目前,它将在每次新部署时清除内存缓存中的所有数据。
通过运行 rake memcached:flush
更重要的是,我可以看到user session
在缓存服务器中,
但是每次,当我关闭 iPhone 上的浏览器时,我都需要一次又一次地重新登录(我一定是出了什么问题)。
我在 AWS ELB
后面设置了我的服务器和 auto scaling
我怎么能保留 ELB 后面每个服务器之间的用户 session
让用户每次回来都保持登录状态。
缓存服务器
| 8 | 2016-03-01 10:07:59 +0000 | 291 | _session_id:08f1d7e8e82055367c44372d431b7f23 |
| 8 | 2016-03-01 10:07:22 +0000 | 291 | _session_id:3553ad00c578b175d789f02dc696dd95 |
| 8 | 2016-03-01 10:04:22 +0000 | 291 | _session_id:5cc2302455981a8a5d3cea98deb80acb |
confi/initialize/session.rb(我用 Dalli 和 memcache 保存缓存)
Rails.application.config.session_store :cookie_store, key: '_sampleA_session'
Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 6.month
查看缓存/模型缓存
- cache("common_header", skip_digest: true) do
- cache("footer", skip_digest: true) do
...
cache.rake( rake 任务)
require 'socket'
namespace :memcached do
desc 'Flushes whole memcached local instance'
task :flush do
server = ENV['MEMCACHE_DB']
port = 11211
command = "flush_all\r\n"
socket = TCPSocket.new(server, port)
socket.write(command)
result = socket.recv(2)
if result != 'OK'
STDERR.puts "Error flushing memcached: #{result}"
end
socket.close
end
end
生产.rb
config.action_controller.perform_caching = true
config.cache_store = :dalli_store, ENV['MEMCACHE_DB'], { :pool_size => 10 ,compress: true }
最佳答案
对于您的两个 View 片段缓存,您可以执行以下操作( docs ):
expire_fragment("common_header")
expire_fragment("footer")
这应该会使缓存的片段无效,因此更新您从该片段中的模型读取的值(因为片段被重新渲染)。如果这就是您对模型缓存的意思,那么您就可以开始了。如果您还想清除 SQL 查询缓存(虽然我不知道您为什么要这样做,因为 Rails 会自动使此无效)您可以引用 this博客文章。
关于ruby-on-rails - 我如何保持记录的 session 并清除内存缓存中的 session 除外的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283423/