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

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

🎂 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍