【问题标题】:Preserve session when clearing cache in memcached清除 memcached 中的缓存时保留会话
【发布时间】:2013-05-10 20:31:14
【问题描述】:

我使用 memcached/dalli 在 Rails 中进行缓存。我还使用dalli_store 作为我的会话存储。

问题是,当我清除视图缓存时,用户将自动退出我的系统。我想这是因为memcached中的所有数据都被清除了,所以session数据丢失了。

有没有办法避免这种情况?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 caching memcached


    【解决方案1】:

    最后我改用 Redis 作为会话存储。

    gem 'redis-rails'
    

    并在会话存储类型中指定它:

    AppEx::Application.config.session_store :redis_store,
    

    然后我可以将 Memcached 用作纯缓存并清除它而不影响用户登录状态。

    这也很好,因为在使用 Memcached 时,当缓存满时用户会被踢出。现在用户会话持续时间更长。

    【讨论】:

    • 您可以消除 Memcache 并使用 Redis 作为所有内容的缓存存储,然后使用命名空间确保在清除主缓存时(使用 Rails.cache.clear),不会清除会话。 # #config/application.rb config.cache_store = :redis_store, 'redis://localhost:6379/0/my_cache' #config/initializers/session_store.rb config.session_store = :redis_store, 'redis://localhost:6379 /0/my_sessions'
    【解决方案2】:

    Rails.cache.clear 清除所有缓存(不可能指定元素)。 如果你想从缓存中清除特定元素,你应该使用Rails.cache.delete(key)(如果你想在某些情况下删除它,请连接一些条件)

    【讨论】:

      【解决方案3】:

      为什么要再次清除缓存?如果您想从缓存中逐出某些陈旧数据并保持会话,则可以在缓存级别设置逐出属性。我不知道 memcached 是否有不同的驱逐选项可用。

      【讨论】:

        猜你喜欢
        • 2015-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 2015-09-27
        • 2012-09-20
        • 1970-01-01
        相关资源
        最近更新 更多