使用 Redis 存储 Rails 会话

And*_*las 7 session ruby-on-rails redis

Rails 的默认会话存储是cookie_store. 这使得会话存储在客户端(如果我错了,请纠正我)。

我想更改此默认行为,以便可以将会话存储到 Redis 数据库中。我在 Internet 上找到的帖子/文章建议设置一个缓存存储以使用redis_cache_store,然后为 session_store 使用cache_store.

据我所知,这意味着缓存和会话都将使用相同的数据库(实例)。我不想要那个。我希望会话和缓存都使用不同的 Redis 实例,因此可以相应地配置它们。

我尝试创建一个config/initializers/session_store.rb包含以下内容的初始化文件:

Rails.application.config.session_store :redis_cache_store, key: '_my_app_session'

Run Code Online (Sandbox Code Playgroud)

但这不起作用。它给了我以下错误:

/application/configuration.rb:324:in `const_get': 未初始化的常量 ActionDispatch::Session::RedisCacheStore (NameError)

我也找到了这个 gem,https://github.com/redis-store/redis-store但我不确定使用这个 gem 会有多大问题,因为 Rails 已经有一个内置的 Redis 缓存存储 ( https://github.com/rails/rails/pull/31134 )

Mon*_*hah -4

redis_cache_store是一个缓存存储,不能直接将其用作会话存储。您必须将redis_cache_store其用作默认值cache_store,然后您可以将其用于cache_store您的session_store. 像这样的东西

在你的config/application.rb(阅读本文以了解原因)

config.cache_store = :redis_cache_store, options
Run Code Online (Sandbox Code Playgroud)

然后在你的config/initializers/session_store.rb

Rails.application.config.session_store = :cache_store, key: '_app_session_key'
Run Code Online (Sandbox Code Playgroud)

还有其他选项可以在不修改的情况下执行此操作cache_store,例如redis-storeredis-session-store