memcached幾個容易被忽略但非常有用的命令,memcached幾個忽略

來源:互聯網
上載者:User

memcached幾個容易被忽略但非常有用的命令,memcached幾個忽略

最近通讀了一遍memcached的源碼,在這個過程中發現了許多memcached平時沒有注意不常用到的命令,但是經常在使用或營運memcached的時候會碰到正好能用到這些命令的需求,只是當時受限於所用的memcached 版本或memcached client或其他原因,不知道memcached還有這些用法,現在給大家分享一下。


一、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 1xSTOREDgets aVALUE a 0 1 1  //最後一位就是a的版本號碼xENDset a 0 0 1ySTOREDgets aVALUE a 0 1 2    //新增或修改之後,版本號碼都會增加ycas a 0 0 1 1    //cas更新的時候,不同於set操作,最後一位要指定版本號碼,當本地版本號碼和伺服器版本號碼相同的時候,更新才會有效xEXISTScas a 0 0 1 2ySTORED


二、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 itemsSTAT items:1:number 3STAT items:1:age 943STAT items:1:evicted 0STAT items:1:evicted_nonzero 0STAT items:1:evicted_time 0STAT items:1:outofmemory 0STAT items:1:tailrepairs 0STAT items:1:reclaimed 0STAT items:1:expired_unfetched 0STAT items:1:evicted_unfetched 0ENDstats cachedump 1 0ITEM c [5 b; 1405246917 s]ITEM b [1 b; 1405246917 s]ITEM a [1 b; 1405246917 s]END

        雖然應用這兩個命令並不能一次顯示全部的key,但是如果我們自己根據stats items的返回值自己做一次迭代,或者僅僅是為了手動做幾個item的抽樣,那麼就能很好的協助我們瞭解memcached中資料的情況。



oracle建立資料表空間的問題 未知的命令開頭,忽略了剩餘的行

CREATE TABLESPACE
TB_COGNOS LOGGING DATAFILE 'D:\Oracle_DataFile\COG\dat_cog.dbf' SIZE 32m
AUTOEXTEND ON NEXT 32m MAXSIZE 2048m EXTENT MANAGEMENT LOCAL;

create和tablespace中間要有空格
 
BAT命令在XP系統下複製檔案到新的檔案夾怎忽略相同更改時間

代碼如下:
::═════代═══碼═══開═══始═════
@echo off&setlocal enabledelayedexpansion
cd/d "D:\My Documents\音樂"
for /f "delims=" %%i in ('dir /a-d/b *.mp3') do (
if exist "F:\音樂\MP3\%%i" (
for /f "delims=" %%a in ("F:\音樂\MP3\%%i") do (
if not "%%~ta"=="%%~ti" copy /y "%%i" "%%a")) else (
copy /y "%%i" "F:\音樂\MP3\%%i"))
pause
::Created By escortmnm from VBS團隊
::═════代═══碼═══結═══束═════
修改時間精確到秒。

如果目標檔案夾是作為備份,原始檔案夾始終是最新的,也可以使用下面的代碼:
::═════代═══碼═══開═══始═════
@echo off
xcopy /D/I "D:\My Documents\音樂\*.mp3" "F:\音樂\MP3\"
PAUSE
::═════代═══碼═══結═══束═════
不過,還是第一個代碼最有效。
 

相關文章

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.