2013-02-26

rails2.3で使っていたcache_fuはrails3.xではRails.cacheで置き換えればよさそう

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Ruby2.3でActiveRecordで取得していろいろいじった後の結果とかをキャッシュするためにcache_fuを利用していました。
Rails3.Xでは、cache_fuは使えない感じです。(ちゃんと調べてないですが・・・)

その代わり、Rails.cacheというrailsが用意しているものが使えそうです。

特になにもせずにいきなり使える感じです。

あるキー(any_key)の値をキャッシュからくださいな。なければ"cache_data"を返してついでにキャッシュしておいてね。
というのは、以下のような感じで利用できます。

data = Rails.cache.fetch("any_key", expires_in: 30.minutes) do
  "cache_data"
end

キャッシュをすべてクリアするには以下でOKです。

Rails.cache.clear



Rails.cache.fetchを使っているメソッドをテストする時などはcacheをクリアしておいた方がよいです。





Rails.cacheで利用できる他のメソッドは以下を見てください。
http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html

ちなみにRails.cacheは特に何も設定せずに利用できますが、その場合はRails.root/tmpの下にファイルでキャッシュするようです。

キャッシュするならば、memcachedでも利用したいものです。

memcahcedの利用も簡単で、config/environments/production.rbに以下のような感じの設定をすればOKです。

config.cache_store = :mem_cache_store, {:namespace => "MyApp"}

これでlocalhost:11211のmemcachedに専用のnamespaceをMyAppとして利用できるようになります。
namespaceはなくてもよいのですが、memcahedが専用でなく他からも利用されるようだったら設定した方がよいと思います。

memcahedを利用するコトに関して以下が参考になります。
http://www.banana-systems.com/2010/09/rails3_memcached/

cache_fuはnamespaceを勝手にいい感じに扱ってくれて、そうそうキーがかぶることはなさそうだったのですが、Rails.cacheの方は自分で気にしないといけないっぽいです。



コメントを投稿