Memcachedの高さとデータの安全性を保証
Memcached::cas()は、「チェックして設定する」操作を実行するため、現在のクライアントが最後に値を取得した後、そのkeyに対応する値が他のクライアントに変更されていない場合にのみ、値を書き込むことができます.検査はcas_を通過しましたtokenパラメータは、Memcachがすでに存在する要素に指定した唯一の64ビット値です.この値を取得するには、Memcached::get*()シリーズメソッドのドキュメントを参照してください.注意:この値がdoubleタイプとして使用されるのは、PHPの完全な空間制限のためです.これはMemcached拡張がMemcache拡張よりも非常に重要な利点であり、このようなシステムレベル(Memcache自身が提供する)の衝突検出メカニズム(楽観ロック)の下で、私たちは高いデータの安全を保証することができます.
phpコードは以下のように実現される.
ソース:http://php.net/manual/zh/memcached.cas.php
phpコードは以下のように実現される.
<?php
$m = new Memcached();
$m->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);
ソース:http://php.net/manual/zh/memcached.cas.php