Rails.cache.fetch でキャッシュがあったら返す/無かったら生成して返す
Rails.cache(ActiveSupport::Cache)
で「キャッシュがあったら返す/無かったら生成して返す」という処理を行いたくて、find_or_cache
というメソッドを書いていたりしたのですが、API ドキュメントを読んでいると、Rails.cache.fetch
というメソッドで同等の処理ができることが判りました。
ActiveSupport::Cache::Store http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch
基本的に API ドキュメントに書いてある通りですが、以下のように書けます:
Rails.cache.fetch('Hatsune') do
'Miku'
end
# => "Miku"
fetch
を使用しない場合は、大体以下のように書くのではないかなと思います(クールな書き方があったら教えてください!) :
cache_key = 'Hatsune'
cache = Rails.cache.read(cache_key)
return cache unless cache.nil?
data = 'Miku'
Rails.cache.write(cache_key, data)
data
Cache Store には Dalli を使用していますが、Dalli も fetch
をサポートしています。
だいぶ簡単に書けるようになりましたね。
では、今年もよろしくお願いします。