前回、Rails.cacheの使い方、低レベルキャッシュの利用方法でRails.cache
の紹介をしました。
Rails.cache
は低レベルキャッシュを実現するためのメソッドです。Rails.cache
のデータの保存先(キャッシュストア)候補にはファイルシステム、メモリ、memcached、Redis、そのほか(キャッシュストアの独自実装)があります。1
今回はRails.cache
で利用するキャッシュストアをRedisにする方法について紹介します。
目次
Redisの用意
RailsアプリケーションでRedisを利用する前に、まずはRedis本体をインストールします。
ローカルの場合
### redisのインストール
$ brew install redis
### redisサーバの起動
$ redis-server
Dockerの場合
Redis用のコンテナをdocker-compose.ymlに追加すればOKです。
version: '3'
services:
app: # アプリケーションコンテナ
...
...
(略)
depends_on:
- redis # redisコンテナを依存関係に追加
redis: # Redisコンテナ
image: redis:latest
volumes:
- redis-data:/data # Redisデータの永続化
volumes:
redis-data:
Gemの追加
キャッシュストアにRedisを利用する場合はredis gemを追加します。
Gemfile
gem 'redis'
キャッシュストアの設定をRedisに変更する
キャッシュストアの設定はconfig.cache_store
で行います。
config.cache_store
を:redis_cache_store
にすることでRedisにキャッシュを保存できます。
Redisを利用する環境の設定ファイルにconfig.cache_store = :redis_cache_store
を追記します。Redisの設定例は以下の通りです。
config/environments/*.rb
config.cache_store = :redis_cache_store, {
url: %w(redis://localhost:6379/0),
# ホスト: localhost(docker環境の場合はredisコンテナ名)
# ポート: 6379
# DB: 0番
}
設定のオプションの詳細についてはredis-rbやRailsガイド『Railsのキャッシュ機構#2.6 ActiveSupport::Cache::RedisCacheStore』をご参照ください。
Rails.cacheとRedisの動作確認
Rails.cache
でキャッシュしたデータがRedisに保存されているか確認します。
まずはRails.cache
でデータを作成します。
$ rails c
### データの作成
> Rails.cache.write("cache_key_example", "cache_value_example")
### データの取得
> Rails.cache.read("cache_key_example")
=> "cache_value_example"
次にredis-cliでRedisの中を確認します。
### redis-cliで接続
$ redis-cli -h localhost -p 6379 -n 0 --raw
# -h: ホスト指定
# -p: ポート指定
# -n: データベース選択
# --raw: マルチバイト文字の文字化けを防ぐ
### 保存されているキーの数
> dbsize
1
### キーの一覧
> keys *
cache_key_example
### valueの種類の確認
> type cache_key_example
string
### valueの確認(stringのvalueはgetで取得する)
> get cache_key_example
o: ActiveSupport::Cache::Entry :
@version0:@created_atf1626436948.692731:@expires_in0_example:ET:
### 終了
> exit
上記の結果から、Redis.cache
によって作成されたデータがRedisに保存されていることがわかります。
まとめ
- Redisをインストール
- radis gemをインストール
- config.cache_storeをredis_cache_storeに設定
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!