redisライブラリの導入
Gemfileに以下を追加する。
1 | gem 'redis' |
Railsのキャッシュの設定
- Railsのキャッシュのデフォルトの保存先はtmpファイルになっている(キャッシュストアの設定)
- Redisを使うように変更するには以下のようにする
対象ファイル:config.enveronments/production.rb
変更内容:1
2
3
4config.cache_store = :redis_cache_store, {
url: ENV['REDIS_URL'],
ssl: true, # この行はAmazon ElastiCache For Redisの場合のみ。ローカルのDocker開発環境の場合は不要
}
ENV['REDIS_URL']
について
ENV['REDIS_URL']
については、それぞれ以下のように設定する。
Amazon ElastiCache For Redis の場合
redis://hoge.serverless.apne1.cache.amazonaws.com:6379/0
ローカルのDocker開発環境の場合
redis://redis:6379/0
docker-compose.yml
に以下のように追記する。
1 | web: |
キャッシュを利用するコード
上記の設定完了後、以下のコードでキャッシュが効くようになる。
1 | key = "cache_count_" + params[:id] |
と、基本的にはこれだけでOK。
注意点
- Redisでは正規表現を使ってキャッシュを削除することができる
- 例えば
Rails.cache.delete_matched('cache_count_*')
- ただし、
Amazon ElastiCache For Redis
は正規表現を使ってキャッシュを削除することができない Amazon ElastiCache For Redis
はクラスター構成となっていて、キャッシュの保存先が分散されているため- 以下のエラーが発生する
CROSSSLOT Keys in request don't hash to the same slot
リストやハッシュをキャッシュする場合
- 上記の設定では、キャッシュの対象は文字列のみ
- リストやハッシュをキャッシュする場合は、
$redis
インスタンスを直接利用する必要がある
$redis
の設定
config/initializers/redis.rb
を作成し、以下のように記述する。
1 | $redis = Redis.new(url: ENV['REDIS_URL']) |
リストをキャッシュする場合
1 | $redis.lpush('list_key', 'value') |
注意点
sslを有効にする場合、Rails.cacheではssl: true
のオプションがあったが、$redis
ではurl
にrediss://
を指定する必要がある。
例えば、rediss://hoge.serverless.apne1.cache.amazonaws.com:6379/0
とすると、sslが有効になる。