redisライブラリの導入
Gemfileに以下を追加する。
Railsのキャッシュの設定
- Railsのキャッシュのデフォルトの保存先はtmpファイルになっている(キャッシュストアの設定)
- Redisを使うように変更するには以下のようにする
対象ファイル:config.enveronments/production.rb
変更内容:
| 1 | config.cache_store = :redis_cache_store, { | 
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を作成し、以下のように記述する。
リストをキャッシュする場合
注意点
sslを有効にする場合、Rails.cacheではssl: trueのオプションがあったが、$redisではurlにrediss://を指定する必要がある。
例えば、rediss://hoge.serverless.apne1.cache.amazonaws.com:6379/0とすると、sslが有効になる。