Rails.cacheについて


Ruby on Railsで特定の値やクエリ結果をキャッシュするしくみとしてRails.cacheを紹介します。
この機能を使うとや有効期限を設定したり、キャッシュ内容を圧縮できます

🐮 メソッド

Rails.cache.fetch

Rails.cache.fetchはキャッシュされた値を取得するメソッドです。
ブロックを渡すことで、キャッシュがなかった場合は指定されたデータをキャッシュにセットして返すことができます。

def cached_title
Rails.cache.fetch(/model/article/title/#{id}, expired_in: 1.hour) do
Article.find(id).title
end
end
オプション 説明
expired_in キャッシュの有効期限を設定します
force force: trueなら強制的に値をキャッシュします
compress データを圧縮してキャッシュします

Rails.cache.fetch_multi

Rails.cache.fetch_multiはキャッシュから複数のキーの値を取得するメソッドです。
特にmemcachedやRedisをネットワーク経由でキャッシュ先に使う場合は、一度に複数のデータを取得することが推奨されます。

Rails.cache.write('hoge', 'fuga')
Rails.cache.fetch_multi('hoge', 'pugi') do |key|
No value #{key}
end
#=> ['hoge' => 'fuga', 'pugi' => 'No value pugi']

Rails.cache.write

Rails.cache.writeはキャッシュへの書き込みを行うメソッドです。

Rails.cache.write('city', 'Sapporo')
Rails.cache.read('city') #=> Sapporo

Rails.cache.exist?

Rails.cache.exist?はキャッシュの存在確認をするメソッドです。

Rails.cache.write('city', 'Sapporo')
Rails.cache.exist?('city') #=> true
Rails.cache.exist?('hoge') #=> false

Rails.cache.delete

Rails.cache.deleteは指定したキーのキャッシュの削除を行うメソッドです。

Rails.cache.write('city', 'Sapporo')
Rails.cache.delete('city')
Rails.cache.read('city') #=> nil

Rails.cache.clear

Rails.cache.deleteはすべてのキャッシュの削除を行うメソッドです。

Rails.cache.write('city', 'Sapporo')
Rails.cache.clear
Rails.cache.read('city') #=> nil

🎳 キャッシュ先の設定

キャッシュのストア先の設定はconfig/environments/xxx.rbに環境毎に設定します。

メモリキャッシュ

:memory_storeでRubyプロセス内のメモリに保持されます。sizeでキャッシュのサイズを指定します。
(32MBがデフォルト)

config.cache_store = :memory_store, { size: 64.megabytes }

ファイルキャッシュ

:file_storeでファイルシステムにキャッシュを保存します。キャッシュの保存先のパスを指定する必要があります。

config.cache_store = :file_store, '/path/to/cache/directory'

memcachedへのキャッシュ

Rails本体にバンドルされたgem「dalli」を使って
memcachedにキャッシュを行うことができます。初期化時にクラスタ内のすべてのmemcachedサーバのアドレスを指定する必要があります。

config.cache_store = :mem_cache_store, cache-1.example.com, cache-2.example.com

アドレスの指定がない場合はローカルのデフォルトポートで動作しているとみなします。

🐝 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)