memcache cas楽観ロック
1458 ワード
CASプロトコルとは
Memcachedは1.2.4バージョンでCAS(Check and Set)プロトコルクラスがJava同時のCAS(Compare and Swap)原子操作に追加され、同じitemが複数のスレッドによって変更される過程の同時問題を処理した.
Memcachedでは、各keyに64ビット長のlong型の唯一の数値が関連付けられ、そのkeyがvalueのバージョン番号に対応することを示す.この値はMemcached serverによって生成され、1から始まり、同じMemcached serverでは繰り返されません.両方の場合、このバージョンの数値は1:1を追加し、key-valueペアを追加します.2、ある既存keyに対応するvalue値の更新に成功した.itemバージョンの削除値は減少しません.
php使用
Memcached::cas()は、「チェックして設定する」操作を実行するため、現在のクライアントが最後に値を取得した後、そのkeyに対応する値が他のクライアントに変更されていない場合にのみ、値を書き込むことができます.チェックは
これはMemcached拡張がMemcache拡張よりも非常に重要な利点であり、このようなシステムレベル(Memcache自身が提供する)の衝突検出メカニズム(楽観ロック)の下で、私たちは高いデータの安全を保証することができます.
転載先:https://www.cnblogs.com/iamdoufu/p/4632923.html
Memcachedは1.2.4バージョンでCAS(Check and Set)プロトコルクラスがJava同時のCAS(Compare and Swap)原子操作に追加され、同じitemが複数のスレッドによって変更される過程の同時問題を処理した.
Memcachedでは、各keyに64ビット長のlong型の唯一の数値が関連付けられ、そのkeyがvalueのバージョン番号に対応することを示す.この値はMemcached serverによって生成され、1から始まり、同じMemcached serverでは繰り返されません.両方の場合、このバージョンの数値は1:1を追加し、key-valueペアを追加します.2、ある既存keyに対応するvalue値の更新に成功した.itemバージョンの削除値は減少しません.
php使用
Memcached::cas()は、「チェックして設定する」操作を実行するため、現在のクライアントが最後に値を取得した後、そのkeyに対応する値が他のクライアントに変更されていない場合にのみ、値を書き込むことができます.チェックは
cas_token
パラメータで行います.このパラメータはMemcachがすでに存在する要素に指定した唯一の64ビット値です.この値を取得するにはMemcached::get*()シリーズメソッドのドキュメントを参照してください.注意:この値がdoubleタイプとして使用されるのは、PHPの完全な空間制限のためです.これはMemcached拡張がMemcache拡張よりも非常に重要な利点であり、このようなシステムレベル(Memcache自身が提供する)の衝突検出メカニズム(楽観ロック)の下で、私たちは高いデータの安全を保証することができます.
addServer('localhost', 11211);
do {
/* ip */
$ips = $m->get('ip_block', null, $cas);
/* , ( , false)*/
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
/* , ip , cas , , false */
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>
転載先:https://www.cnblogs.com/iamdoufu/p/4632923.html