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

キャッシュでよく使われるmemcachedはロック機構が存在しないようですが、
仮に全く同じタイミングでキーの追加や更新を行って競合が発生した場合、
そのキーは消えるなど、どのような挙動になるのでしょうか?


●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:memcached キャッシュ キー タイミング ロック
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

ご質問の「ロック機構」というのは、RDBMSのロックを意味しているのではないかと思いました。そういうロック機構は、memcached には存在しません。memcached に対するトランザクション制御はアプリ側に任されているからです。


memcached の追加(add)は同じキーを受け付けないので、キー名競合は起こりません。

更新(replace)は、同時に1つしか受け付けないので、デッドロックが発生することはありません。


ただし、memcached はRDBMSなどのストレージとセットで利用されることが多いので、アプリ側でしっかりしたトランザクション制御をしてやる必要があります。その方式については、「勝手に図解するmemcached」に詳しく記されています。

◎質問者からの返答

言葉足らずですみません、追加とはDBでいうinsertのことでした。

ファイルロックを使ったCGIカウンタの場合、書き込み時に競合が発生するとファイルが消えるようですが、

memcachedの場合も同様に、データが消えるのかどうか知りたかったのです。

ともあれ回答有り難うございました。リンク先も参考にさせて頂きます。


2 ● y-kawaz
●35ポイント

>言葉足らずですみません、追加とはDBでいうinsertのことでした。

>ファイルロックを使ったCGIカウンタの場合、書き込み時に競合が発生するとファイルが消えるようですが、

>memcachedの場合も同様に、データが消えるのかどうか知りたかったのです。


アプリ側で特にロック処理をおこなわずget&setでカウンタを作ったとすれば、競合が原因でデータを消失することはありませんが、カウント漏れは発生する可能性はあります。

データ消失に関しては、そもそも素のmemcachedはディスクへの書き込みを行いませんので競合ではなくmemcachedの停止によりデータが消えると思います。

また、単にカウンタを作りたいのであればget&setでカウントアップするのではなくincrを使えば競合アトミックにカウントアップを行うことができます。

◎質問者からの返答

なるほど。データの消失はないのですね。

ちなみにカウンタはあくまで一例で、カウンタを作りたいわけではありませんが、

incrでアトミックに行えるのは知りませんでした。回答有り難うございます。

関連質問


●質問をもっと探す●



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