ruby-on-rails - 在 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 领域不寻常的事情?
解决方案
要单独配置会话存储以使用 Redis,您需要使用提供 Redis 会话存储的 gem:或者redis-store
(注意redis-activesupport
已弃用,但redis-actionpack
不是),或redis-session-store
.
您不能在使用会话存储时单独配置:cache_store
会话存储,因为它将会话存储在实际缓存中......它不仅仅是“类似缓存”的存储,因此它不能覆盖/行为与缓存本身不同。
将会话内容存储在 cookie 以外的地方有点不寻常,因为会话 cookie 已加密并且防篡改,但这种情况并不少见。如果你打算这样做,Redis 是一个不错的选择。
推荐阅读
- angular - Openlayers 地图不使用全宽
- exoplayer - Android App 可以像 Tiktok 一样即时播放视频
- django - 向用户请求 Django POST API 中的某些元素
- javascript - 单击浏览器的后退按钮时如何销毁会话
- php - 在贝宝沙箱中付款后未收到交易详细信息
- konvajs - 可以用Konva画椭圆弧吗?
- android - 如何使用 smack 4.3.4 从 android 发送房间配置表单并创建持久性房间
- react-native - 如何在 React Native 中编写格式良好的代码?
- html - 如何创建一个 html 文本编辑器来执行所有语法高亮?
- elasticsearch - ES 节点失败并出现 java.lang.AssertionError: java.text.ParseException