Memcached::cas 詳解

高洛峰
發布: 2016-10-17 10:20:50
原創
1210 人瀏覽過

Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::cas — 比較並交換值

說明

public bool Meedaked, floalp. [, int $expiration ] )

Memcached::cas()執行一個「檢查並設定」的操作,因此,它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。檢查是透過cas_token參數進行的, 這個參數是Memcach指定給已經存在的元素的一個唯一的64位值, 怎樣取得這個值請查看Memcached::get*() 系列方法的文檔。注意:這個值作為double型別是因為PHP的整數空間限制。

譯註:這是Memcached擴展比Memcache擴展一個非常重要的優勢, 在這樣一個系統級(Memcache本身提供)的衝突檢測機制(樂觀鎖)下, 我們才能保證高並發下的數據安全。

參數 

cas_token

與已存在元素關聯的唯一的值,由Memcache產生。

key

用於儲存值的鍵名。

value

儲存的值。

expiration

到期時間,預設為 0。 更多資訊請參閱到期時間。

回傳值 

成功時回傳 TRUE, 或失敗時回傳 FALSE。 如果在元素嘗試儲存時發現在本客戶端最後一次取得後被其他客戶端修改,Memcached::getResultCode() 將會傳回Memcached::RES_DATA_EXISTS。

範例 

Example #1 Memcached::cas() 範例

<?php
$m = new Memcached();
$m->addServer(&#39;localhost&#39;, 11211);
do {
    /* 获取ip列表以及它的标记 */
    $ips = $m->get(&#39;ip_block&#39;, null, $cas);
    /* 如果列表不存在, 创建并进行一个原子添加(如果其他客户端已经添加, 这里就返回false)*/
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips = array($_SERVER[&#39;REMOTE_ADDR&#39;]);
        $m->add(&#39;ip_block&#39;, $ips);
    /* 其他情况下,添加ip到列表中, 并以cas方式去存储, 这样当其他客户端修改过, 则返回false */
    } else { 
        $ips[] = $_SERVER[&#39;REMOTE_ADDR&#39;];
        $m->cas($cas, &#39;ip_block&#39;, $ips);
    }   
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>
登入後複製


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!