memcached幾個easy被忽略但很實用的命令

2021-09-22 10:33:22 字數 2469 閱讀 5464

一、cas和gets

memcached從1.2.4版本號新增cas(check and set)協議,用於處理同乙個item(key-value)被多個session更新改動時的資料一致性問題。

如果有兩個session(a、b)。要同一時候改動某個key的值x,而且改動的資料是基於原來資料的乙個計算的結果。session a和b同一時候得到了key的值x,session a經過計算後應該更新為y,session b經過計算後也更新為y,可是session b事實上期望的是拿到y值,並將其計算為z後更新。

造成這個問題的解決辦法就是缺少乙個類似於mysql的事務,用於資料併發改動的一致性問題。

cas命令著眼於解決一定的併發改動問題,引入了

樂觀鎖的概念。在試圖改動某個key的值之前,先由gets命令得到某個key的值及其版本。完畢資料操作更新資料時。使用cas慎重更新,比較版本是否與本地的版本一致,否則放棄此次的改動。

memcached在預設開啟cas協議後,每乙個key關聯有乙個64-bit長度的long型惟一數值。表示該key相應value的版本。

這個數值由memcached server產生。從1開始,且同一memcached server不會反覆。在兩種情況下這個版本號數值會加1:

1、新增乙個key-value對;

2、對某已有key相應的value值更新成功。刪除item版本號值不會減小。 

首先為了獲得key值的版本,引入了gets命令,能夠發現gets命令比get命令多返回了乙個數字,這個數字就是上面我們提到的key值的版本。

然後是cas命令。與set命令類似,僅僅是在最後面多了乙個引數,也就是key值得版本。僅僅有版本與儲存的資料版本一致時,更新操作才會生效。

set a 0 0 1

xstored

gets a

value a 0 1 1 //最後一位就是a的版本

xend

set a 0 0 1

ystored

gets a

value a 0 1 2 //新增或改動之後。版本都會新增

ycas a 0 0 1 1 //cas更新的時候。不同於set操作。最後一位要指定版本,當本地版本和server版本同樣的時候,更新才會有效

xexists

cas a 0 0 1 2

ystored

二、stats items和stats cachedump

你以前是否也有想知道memcached裡面都存了哪些資料的需求,你是否也以前在尋找乙個方法能像redis一樣能夠遍歷memcached全部的key

事實上就是應用我們平時經經常使用到的stats方法。stats方法不僅能獲得memcached的乙個概況資訊,假設加上子命令還能夠獲得很多其它的更加具體的資訊。如slabs,items等。

stats items命令,能夠獲得memcached內item組的相關資訊,如分組內item的數量,踢掉次數等。

後面執行cachedump命令的時候會用到這個命令的返回資訊(item組序號)。

stats cachedump命令,能夠將某個slab中的items所有dump出來。第乙個引數就是上面stats items返回的items組號,也就是slab的編號,第二個引數為一次顯示多少個item資訊,假設為0就顯示這個item組的所有items,第二列就是key。

stats items

stat items:1:number 3

stat items:1:age 943

stat items:1:evicted 0

stat items:1:evicted_nonzero 0

stat items:1:evicted_time 0

stat items:1:outofmemory 0

stat items:1:tailrepairs 0

stat items:1:reclaimed 0

stat items:1:expired_unfetched 0

stat items:1:evicted_unfetched 0

endstats cachedump 1 0

item c [5 b; 1405246917 s]

item b [1 b; 1405246917 s]

item a [1 b; 1405246917 s]

end

儘管應用這兩個命令並不能一次顯示所有的key,可是假設我們自己依據stats items的返回值自己做一次迭代,或者不過為了手動做幾個item的抽樣,那麼就能非常好的幫助我們了解memcached中資料的情況。

memcached幾個easy被忽略但很實用的命令

一 cas和gets memcached從1.2.4版本號新增cas check and set 協議,用於處理同乙個item key value 被多個session更新改動時的資料一致性問題。如果有兩個session a b 要同一時候改動某個key的值x,而且改動的資料是基於原來資料的乙個計算...

整數反轉 easy

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。利用字串解決,先上 public intreverse int x else return z 123 123 321 321解決思路 先想著將整數轉換成string型然後利用reverse方法進行反轉。判斷 反轉 轉成long...

chartControl 資料Easy處理

using system using system.collections.generic using system.text using system.data using devexpress.xtracharts namespace mysun 樣式 chart.seriestemplate....