使用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の設定をしてみる
广告
将在 10 秒后关闭
bannerAds