使用Rails将会话(session)保存到Redis中
简而言之
本次我們將講解一下被廣泛使用作為可持續化的KVS的Redis。
Redis能夠以簡單的鍵-值關係保存數據,並被用於會話管理和其他各種場景。
我想,如果你浏览一下关于在NicoNico直播中使用Redis的案例,你可能更容易理解如何运用它。
这次我们将讲解redis的安装、基本操作,以及它如何被用作rails的session存储。
安装Redis
苹果电脑
为了在Mac上安装Redis,使用brew工具必不可少。
~ brew install redis
起动和连接通过以下命令完成。
~ redis-server /usr/local/etc/redis.conf
~ redis-cli
“中心”
对于cent的情况,可以使用yum进行安装。
~ sudo yum --enablerepo=epel install redis
启动并连接,请使用以下命令。
~ sudo /etc/init.d/redis start
~ redis-cli
Redis的基本操作
以下是Redis的基本操作。
# DBの選択(何番目のDBなのか。0 ~ 15まであります)
> select 0
# 保存されているキー数
> dbsize
# value閲覧
> get key_here
# 削除
> flushdb
# 終了
> exit
Redis配置文件的设置
我们将详细考虑实际的细节设置。每个redis.conf文件的路径如下:
# Mac
/usr/local/etc/redis.conf
# Cent
/etc/redis.conf
以下是您在进行开发时应该注意的最低限度项目(仅供参考)。
# サービスとして起動したい場合はデーモンをyesにする
daemonize no
# デーモン化した場合のpidのパス指定
pidfile /usr/local/var/run/redis.pid
# redisが動くport指定
port 6379
# 接続元の制限(Master, Slave構成にする際に制御したりなど。0.0.0.0を設定するとすべてのサーバーからアクセス可能になります)
bind 127.0.0.0
# timeout時間の設定
timeout
# redisのログレベル設定(項目についてはredis.conf内のコメント参照)
loglevel verbose
# ログファイルの場所
logfile /usr/local/var/log/redis.log
# スナップショットの保存条件(以下は10分に1度でも変更があったら保存)
save 600 1
# dbファイルの圧縮
rdbcompression yes
师傅,奴隶构成
在传统的数据库中,常常使用主从配置来实现,而Redis也可以很容易地构建这样的配置。
绑定设置
为了使从Redis变成主Redis的连接可以建立,我们需要对主Redis的redis.conf文件中的bind进行配置。
# 接続を許可するipを記載
bind xxx.xxx.xxx.xxx
之后重新启动redis,并使用以下命令确认是否可以访问master的redis。
~ redis-cli -h <master redis ip>
如果无法访问,可能原因也可能是iptables等设置的问题,请您也检查一下相关设置。
奴隶设定
由于Redis的redis.conf配置文件中有一个名为slaveof的选项,我们需要在这里进行设置。
slaveof <master ip> <master port>
请重新启动电脑,并使用以下指令确认是否成功反映。
~ redis-cli
> INFO
・
・
# Replication
role:slave
・
・
使用在Rails中作为会话存储的东西
在这里,我们已经触及了Redis的基本知识。最后,我将给出一个实际上作为Rails会话存储使用的例子。
环境
-
- ruby 2.2.0
- ruby on rail 4.2.3
宝石的引入
在使用Rails时,通常会使用redis-rails来使用Redis。这次我们也会使用它。
请在Gemfile中加入redis-rails并运行bundle install命令。
gem 'redis-rails'
~ bundle install --path vendor/bundle
会话保存设置
首先,请将Rails中默认的session配置注释掉(config/initializers/session_store.rb)。
~ vim config/initializers/session_store.rb
# Rails.application.config.session_store :cookie_store, key: '_app_session'
接下来,我们将为每个环境添加新的设置(以development环境作为示例)。
~ vim config/environments/develpoment.rb
Rails.application.configure do
・
・
・
config.session_store :redis_store, {
servers: {
host: 'localhost',
port: 6379,
db: 0,
namespace: 'sessions'
},
expire_after: 60.minutes
}
end
我想,您重启服务器并创建会话后,这些会话应该会保存在 Redis 中。
请看这个参考。
-
- Rails で Redis をセッションストアに使うメモ
-
- RailsのセッションストアとしてRedisを使う(Mac/EC2:AmazonLinux)
-
- redisサーバー構築メモ
- redis.confの設定をしてみる