Memcached::cas 詳解

來源:互聯網
上載者:User
Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::cas — 比較並交換值

說明

public bool Memcached::cas ( float $cas_token , string $key , mixed $value [, 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() 樣本

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);?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.