Memcachedの高さとデータの安全性を保証


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