實戰Memcached快取系統(4)Memcached的CAS協議

鍾超發表於2011-12-18

尊重知識,轉載請註明本文來自:程式設計藝術家Poechant的CSDN部落格 http://blog.csdn.net/poechant


1. 什麼是CAS協議

很多中文的資料都不會告訴大家CAS的全稱是什麼,不過一定不要把CAS當作中國科學院(China Academy of Sciences)的縮寫。Google.com一下,CAS是什麼?CAS是Check And Set的縮寫。


2. CAS協議原文

http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt


3. CAS的基本原理

基本原理非常簡單,一言以蔽之,就是“版本號”。每個儲存的資料物件,多有一個版本號。我們可以從下面的例子來理解:

如果不採用CAS,則有如下的情景:

第一步,A取出資料物件X;

第二步,B取出資料物件X;

第三步,B修改資料物件X,並將其放入快取;

第四步,A修改資料物件X,並將其放入快取。

我們可以發現,第四步中會產生資料寫入衝突。


如果採用CAS協議,則是如下的情景。

第一步,A取出資料物件X,並獲取到CAS-ID1;

第二步,B取出資料物件X,並獲取到CAS-ID2;

第三步,B修改資料物件X,在寫入快取前,檢查CAS-ID與快取空間中該資料的CAS-ID是否一致。結果是“一致”,就將修改後的帶有CAS-ID2的X寫入到快取。

第四步,A修改資料物件Y,在寫入快取前,檢查CAS-ID與快取空間中該資料的CAS-ID是否一致。結果是“不一致”,則拒絕寫入,返回儲存失敗。


這樣CAS協議就用了“版本號”的思想,解決了衝突問題。


尊重知識,轉載請註明本文來自:程式設計藝術家Poechant的CSDN部落格 http://blog.csdn.net/poechant

-

相關文章