Rails.cacheの保存先(キャッシュストア)をRedisにする方法

Ruby

前回、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-rbRailsガイド『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に保存されていることがわかります。

まとめ

Rails.cacheのキャッシュストアをRedisにする手順
  1. Redisをインストール
  2. radis gemをインストール
  3. config.cache_storeをredis_cache_storeに設定

Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!

参考記事