仮に全く同じタイミングでキーの追加や更新を行って競合が発生した場合、
そのキーは消えるなど、どのような挙動になるのでしょうか?
ご質問の「ロック機構」というのは、RDBMSのロックを意味しているのではないかと思いました。そういうロック機構は、memcached には存在しません。memcached に対するトランザクション制御はアプリ側に任されているからです。
memcached の追加(add)は同じキーを受け付けないので、キー名競合は起こりません。
更新(replace)は、同時に1つしか受け付けないので、デッドロックが発生することはありません。
ただし、memcached はRDBMSなどのストレージとセットで利用されることが多いので、アプリ側でしっかりしたトランザクション制御をしてやる必要があります。その方式については、「勝手に図解するmemcached」に詳しく記されています。
>言葉足らずですみません、追加とはDBでいうinsertのことでした。
>ファイルロックを使ったCGIカウンタの場合、書き込み時に競合が発生するとファイルが消えるようですが、
>memcachedの場合も同様に、データが消えるのかどうか知りたかったのです。
アプリ側で特にロック処理をおこなわずget&setでカウンタを作ったとすれば、競合が原因でデータを消失することはありませんが、カウント漏れは発生する可能性はあります。
データ消失に関しては、そもそも素のmemcachedはディスクへの書き込みを行いませんので競合ではなくmemcachedの停止によりデータが消えると思います。
また、単にカウンタを作りたいのであればget&setでカウントアップするのではなくincrを使えば競合アトミックにカウントアップを行うことができます。
なるほど。データの消失はないのですね。
ちなみにカウンタはあくまで一例で、カウンタを作りたいわけではありませんが、
incrでアトミックに行えるのは知りませんでした。回答有り難うございます。
言葉足らずですみません、追加とはDBでいうinsertのことでした。
ファイルロックを使ったCGIカウンタの場合、書き込み時に競合が発生するとファイルが消えるようですが、
memcachedの場合も同様に、データが消えるのかどうか知りたかったのです。
ともあれ回答有り難うございました。リンク先も参考にさせて頂きます。