「emcconville」への回答として。これは、CAS がなくてもノンブロッキングです。
競合状態が懸念され、カウント値が完全に任意である場合はMemcache::increment
、ビジネス ロジックの直前に使用できます。
インクリメントメソッドは、インクリメントが行われた後に現在の値を返します。そのうち、結果を比較できます。キーがまだ設定されていない場合、Increment もfalseを返します。アプリケーションが必要に応じて処理できるようにします。
$current = $memcache_obj->increment('count');
if($current === false) {
// NOT_FOUND, so let's create it
// Will return false if has just been created by someone else.
$memcache_obj->add('count',0); // <-- no risk of race-condition
// At this point 'count' key is created by us or someone else (other server/process).
// "increment" will update 0 or whatever it is at the moment by 1.
$current = $memcache_obj->increment('count')
echo "You are the $current!";
}
if ($current < 100) {
echo "Hazah! You are under the limit. Congrats!";
} else {
echo "Ah Snap! No Luck - you reached the limit.";
// If your worried about the value growing _too_ big, just drop the value down.
// $memcache_obj->decrement('count');
}