人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Rails3で、dalliを使ってRails.cacheでMemcachedを扱う上で、値の更新が反映されるタイミングについて質問です。

unicornで複数のRailsのプロセスを立ち上げているのですが、片方のプロセスで更新したデータが他のプロセスで実行中の処理に反映されるタイミングに疑問があります。

例えばAのプロセスで

loop do
logger.info Rails.cache.read("hoge")
sleep 1
end

とやって、1秒ごとにキャッシュ "hoge" の値をログに出し続けるとします。

これをやってる間に、Bのプロセスで、

Rails.cache.write("hoge", "1")

とやってキャッシュ "hoge" の値を更新したとしても、Aのプロセスがログに出す値が "1" に変化しません。

しかし、プロセスAを一度止めて、もう一度呼び出すと、"1" が出るようになります。

これはつまり、dalliを使ってMemcachedをストアとしたRails.cache.readは、一度データを読み込んでしまうと、(Rubyプロセス上のメモリにキャッシュしてしまうなどの理由で)他から更新されても反映されないということなのでしょうか?

これをすぐに反映されるようにしたいんですが、何か良い方法はありますか?

ruby 1.9.3p392
rails 3.2.8
dalli 2.6.3
memcached 1.4.4


●質問者: nacookan
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 0/0件

▽最新の回答へ

質問者から

memcachedを-vvvで立ち上げて、リクエストが来たらわかるようにしてテストしてみました。

そうしたら、Aのプロセスではループの最初の1回目のRails.cache.readのときしかmemcachedに対してリクエストは来てませんでした。

それ以降は、Rails.cache.readをしてもmemcachedにはアクセスせず、プロセス内部で持ってる値を返してるようです。なので、別なプロセスからmemcachedのデータをRails.cache.writeで更新しても、無限ループしてる方には反映されないようです。

非常に残念なんですが、なんとかなりませんか。。。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ