首页 > 解决方案 > 在 Rails 5 中使用不同的 redis 存储进行会话和缓存

问题描述

我是 Ruby 和 Rails 的新手。我正在使用 Ruby on Rails 5.2 构建一个 Web 应用程序。我已将其配置为使用redis-cache-store来管理视图缓存:

config.cache_store = :redis_cache_store, { driver: :hiredis, namespace: "my-app", compress: true, url: ENV["REDIS_URL"] }

我已将会话存储配置为:

Rails.application.config.session_store :cache_store, {
  key: "sid",
  expire_after: 30.minutes
}

所以在这里我使用:cache_store作为我的会话存储。据我了解,这意味着视图缓存和会话数据的条目存储在同一个 Redis 数据库中。

据我了解,redis-rails如果使用 Rails 5.2,则不再需要 gem,因为内置了对 redis 的支持 - https://github.com/redis-store/redis-rails#a-quick-note-about-导轨-52。因此,我没有使用过那个宝石。

有没有办法为会话使用不同的 redis 存储,为视图缓存使用不同的存储?

或者我是否正在尝试做一些在 Rails 领域不寻常的事情?

标签: ruby-on-railsrubyredisruby-on-rails-5

解决方案


要单独配置会话存储以使用 Redis,您需要使用提供 Redis 会话存储的 gem:或者redis-store(注意redis-activesupport已弃用,但redis-actionpack不是),或redis-session-store.

您不能在使用会话存储时单独配置:cache_store会话存储,因为它将会话存储在实际缓存中......它不仅仅是“类似缓存”的存储,因此它不能覆盖/行为与缓存本身不同。

将会话内容存储在 cookie 以外的地方有点不寻常,因为会话 cookie 已加密并且防篡改,但这种情况并不少见。如果你打算这样做,Redis 是一个不错的选择。


推荐阅读