Procの実行結果を一定期間キャッシュしてくれるproc-cache便利
俺の前に作ったproc-cacheというモジュールを最近また使い始めてるけどまじで便利や。retry-handlerぐらい便利だな。
https://github.com/kimoto/proc-cache
これはProcの実行結果を一定期間キャッシュしてくれるというもの。なんていうかわかりやすいんだよね。コードとしてみた時に。
require 'proc-cache' # 1回目の実行。これはキャッシュされないので3秒後に"heavy task"とコンソールに出力される puts proc{ sleep 3; "heavy task" }.cache! => "heavy task" # 3秒後に"heavy task"という文字列が戻ってくる # 2回目の実行。これはキャッシュされるのでただちに"heavy task"とコンソールに出力される puts proc{ sleep 3; "heavy task" }.cache! => "heavy task" # ただちに"heavy task"という文字列が戻ってくる
もちろんキャッシュの時間を指定したりとか、キャッシュファイルの場所を変更できる
# 2時間経過するまでキャッシュを使う {...}.cache! :expires => 2.hours, :cache_path => '/tmp/test.cache'
ファイルシステム上にキャッシュさせる部分がいけてないけど、でも最近のさくらVPSだと、/dev/shm がデフォルトで用意されてて、これはオンメモリなファイルシステムなので、きわめて高速。だからproc-cacheと相性がよい。:cache_path => '/dev/shm/pageviews.cache' みたいな感じで運用してる
サイドバーのページビューとかもこれつかって30分ぐらい手軽にキャッシュさせてる。これをmemcachedに対応させたらさらに高速になるし便利っぽいなぁ。Proc::Cache::Store = :memcached みたいに変更出来るようにするかー。