2008年10月31日金曜日

勘弁してください、のその後

勘弁してください、ほんと・・・
で書いた、memcache排他の件だが、とりあえず以下のように回避しました。

1.memcacheをgetする。
2.memcacheに「使用中です」と書いてあったら、memcacheをgetしつつループで使用中でなくなるのを待つ。
3.memcacheに「使用中です」という値を追加して、setする。
4.やりたい処理をする。
5.「使用中です」を取り去って更新したmemcacheを書き込む。

set直後にgetしても値は更新されたものが取れるので、別プロセスが「使用中なのに使用中でなく見える」ということはなさそう。

ただこれも厳密には、1~3の間に、別プロセスの処理で1がきちゃったらアウト。でもそこまでは考えないようにしよう。

0 件のコメント: