将Heroku上的会话存储位置更改为Redis

我先说明一下,我是参考了 Qiita 上的以下文章(几乎完全一模一样)进行实现的,内容是有关在 Rails 中使用 Redis 作为会话存储的方法(适用于 Mac/EC2: AmazonLinux)。

或许更改了一些符合自己喜好的环境设置,只是生产环境使用的是AWS和Heroku的不同而已。建议您查看原文,可能会更容易理解。


最近將Redis設置為會話保存的目的地,這是一個評價很好的選擇。在Rails中,會話的默認保存位置是Cookie,但考慮到以下情況,我們決定改用Redis。關於使用CookieStore時的問題,可以參考OAuth.jp上的談話。

在进行一次初步调查时,我找到了一些相关信息。通过看这样一个网站上的性能比较,我不禁感叹这真的很厉害。
在使用MomocloRider做测试时,Redis和MongoDB在Heroku平台上进行比较的第二次尝试。
我读了《NoSQL数据库指南》,作者是@sasata299。

在Mac上安装Redis。

请参考原始资料,因为它们遵循完全相同的步骤并且能够成功进行。

在Rails中引入Redis

我进行了一些变动。

gem 'redis'
gem 'redis-rails'
# Rails.application.config.session_store :cookie_store, key: 'XXXXXX'
Rails.application.config.session_store :redis_store, servers: Rails.application.config.session_store_servers, expire_in: BestTeacher::Application.config.session_expires_in
Rails.application.configure do
    :
  # for session store.
  config.session_store_servers = 'redis://localhost:6379/0'
    :
end
Rails.application.configure do
    :
  # for session store.
  config.session_store_servers = ENV["REDISCLOUD_URL"]
    :
end

将 staging.rb 进行与 production.rb 相同的修改。
由于环境变量是基于 Redis Cloud 的,默认情况下,请根据需要适当调整为其他插件。

只要Redis的运行确认正常,只需要对代码进行以下修改。
重新启动服务器,应该能够成功保存会话。
* 当然,会话的保存位置会更改,因此已登录的用户将需要重新登录。

另外,如果您想将与会话不同的数据一起存储在Redis中,您也可以使用类似前缀的方式,如下所示。

Rails.application.configure do
    :
  # for session store.
  config.session_store_servers = 'redis://localhost:6379/0/session'
    :
end

但基本上我觉得应该将数据库单独保存(只需更改末尾的数字如0)。

查看保存在Redis中的数据。

请参照原始材料。另外,如果您添加一个前缀,我认为可以通过这种方式进行关键字搜索。

127.0.0.1:6379> keys session*
1) "session:f1412e2bbe5df2091ebdf2e3025e2335"

请选择使用哪个 Redis 插件?

目前,Heroku 上有4个 Redis 插件。
看起来很快就会增加第5个。

    • Redis Cloud | Add-ons | Heroku

 

    • Redis To Go | Add-ons | Heroku

 

    • RedisGreen | Add-ons | Heroku

 

    openredis | Add-ons | Heroku

我不太清楚哪个是最好的,不过有一个比较网站。
Heroku Redis 供应商比较:OpenRedis、Redis To Go、RedisGreen、Redis Cloud。
它们以表格形式排列,非常方便比较选择显示,这对我非常有帮助。
首先,我受到价格的吸引,所以选择了 Redis Cloud。

从 Heroku Dev Center 查看技术信息Redis Cloud,我认为它经过精心设计,使得从其他现有的 Redis 迁移数据变得更加容易,非常有野心和优秀。

虽然没有实际操作过无法确切评价,但还可以访问备份数据这一点也很不错。

这意味着可以无须犹豫地迁移到其他附加组件。

是很好的通过计划可以快速创建多个数据库,但是每个数据库是否可以有容量限制,类似配额这样的功能呢?
虽然我在Redis本身似乎没有看到这样的功能,但是我在使用会话和缓存来分离数据库时,想是否可以为会话方面提供更多的容量保证。

另外,此时撰写本文时,仍未在暂存环境中进行评估。
在进行操作确认及正式发布之后,如有错误等情况,将加以修正。但请事先了解,文章中可能包含未经确认的信息。

广告
将在 10 秒后关闭
bannerAds