2010-03-15memcachedをsession storeに使用することについて
memcachedをsession storeに使用することについて
session storeにはdb(active record)よりmemcachedが早くていいよ
という記事をよく見かける。
確かに実装は楽チン。
config.action_controller.session_store = :mem_cache_store
でも
memcachedってキャッシュなので
session切れて再ログインってのは、やだよなぁと思っていたところ
↓の記事を読んで、結構すっきりした。
Why storing session on memcached? - Bulknews::Subtech - subtech
(まぁ、ポリシー次第だとは思いますが)
基本はsessionは永続化したい。
だけど、rails標準では、write-through cache させていない。
そこで
ですよ。
サーバ2台のマルチマスタを実現しているので、冗長構成にはピッタリ。
あとは
tokyo cabinet や他のkvsも試してみたい。
2010-03-13action cache with memcached
action cache with memcached
railsのキャッシュには
page / action / fragment
がある。
page cachingはrailsの内部処理が省けるので非常に高速。
ディスクに出力結果を格納する(cache storeを選択できない)。
今回は、memcachedの使用を前提としたので
action / fragment caching のどちらかだが
requestされるurlベースでcachingしたかったので
action cachingを使用してみた。
install
gem install memcache-client gem install system_timer
書き方
# environments/develop.rb config.action_controller.perform_caching = true config.cache_store = :mem_cache_store, 'localhost:11211', { :namespace => 'app' }
# /opt/local/lib/ruby/gems/1.8/gems/memcache-client-1.8.0/lib/memcache.rb DEFAULT_OPTIONS = { :namespace => nil, :readonly => false, :multithread => true, :failover => true, :timeout => 0.5, :logger => nil, :no_reply => false, :check_size => true, :autofix_keys => false, :namespace_separator => ':', }
namespaceは、environmentとかversionとか入れた方がいいかも。
# controller caches_action :index, :expires_in => 5.seconds
確認方法
telnet localhost 11211 # idを調べる stats items STAT items:16:number 1 STAT items:16:age 20936 STAT items:16:evicted 0 STAT items:16:evicted_time 0 STAT items:16:outofmemory 0 STAT items:16:tailrepairs 0 END #詳細を確認 stats cachedump 16 100 ITEM app:views/localhost:3000/hoges [2388 b; 1268504202 s] END
もうちっとみやすいツールはないんだろうか。
memcachedがダウンしていると
ログ上は、こんな感じ。
MemCacheError (No connection to server (localhost:11211 DEAD (Errno::ECONNREFUSED: Connection refused - connect(2)), will retry at Sat Mar 13 20:45:12 +0900 2010)): No connection to server (localhost:11211 DEAD (Errno::ECONNREFUSED: Connection refused - connect(2)), will retry at Sat Mar 13 20:45:12 +0900 2010) Cached fragment miss: views/localhost:3000/hoges (1.3ms)
エラーなく使えるし、memcachedを上げると
再びcacheを利用するようになる。
課題
page / action cachingはクエリストリングス(パラメータ)を認識しないでキャッシュしちゃう。
action caching は、ソースを見たところcache_path を使用すればなんとかなりそう。