Как я могу сохранить зарегистрированную сессию и очистить кеш, кроме сессии в memcache

В моей системе есть много web servers поделиться одним cache(memcache) server,

В настоящее время он очищает все данные в memcache при каждом новом развертывании.

запустив rake memcached:flush

Более того, я могу видеть user session на сервере кеша,

Но каждый раз, когда я закрываю браузер на моем iPhone, мне нужно повторно входить в систему снова и снова (я должен получить что-то не так).

Я установил свой сервер в задней части AWS ELB а также auto scaling

Как я могу сохранить сессию пользователей на каждом сервере позади ELB

Чтобы держать пользователя в зарегистрированном состоянии каждый раз, когда он возвращается.

кеш-сервер

|       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

production.rb

  config.action_controller.perform_caching = true
  config.cache_store = :dalli_store, ENV['MEMCACHE_DB'], { :pool_size => 10 ,compress: true }

1 ответ

Для двух кэшей фрагментов просмотра вы можете сделать ( документы):

expire_fragment("common_header")
expire_fragment("footer")

Это должно сделать недействительным кэшированный фрагмент и, следовательно, обновить значения, которые вы читаете из модели в этом фрагменте (поскольку фрагмент перерисовывается). Если это то, что вы имеете в виду под кешем модели, то вы можете идти. Если вы также хотите очистить кэш SQL-запросов (хотя я не знаю, почему вы хотите это сделать, поскольку Rails автоматически делает это недействительным), вы можете обратиться к этому сообщению в блоге.

Другие вопросы по тегам