Memcached常用命令及使用說明一、存儲(chǔ)命令
存儲(chǔ)命令的格式:
1
2
<command name> <key> <flags> <exptime> <bytes>
<data block>
參數(shù)說明如下:
<command name>set/add/replace
<key>查找關(guān)鍵字
<flags>客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對(duì)的額外信息
<exptime>該數(shù)據(jù)的存活時(shí)間,0表示永遠(yuǎn)
<bytes>存儲(chǔ)字節(jié)數(shù)
<data block>存儲(chǔ)的數(shù)據(jù)塊(可直接理解為key-value結(jié)構(gòu)中的value)
1、添加
(1)、無論如何都存儲(chǔ)的set
這個(gè)set的命令在memcached中的使用頻率極高。set命令不但可以簡(jiǎn)單添加,如果set的key已經(jīng)存在,該命令可以更新該key所對(duì)應(yīng)的原來的數(shù)據(jù),也就是實(shí)現(xiàn)更新的作用。
可以通過“get 鍵名”的方式查看添加進(jìn)去的記錄:
如你所知,我們也可以通過delete命令刪除掉,然后重新添加。
(2)、只有數(shù)據(jù)不存在時(shí)進(jìn)行添加的add
(3)、只有數(shù)據(jù)存在時(shí)進(jìn)行替換的replace
2、刪除
可以看到,刪除已存在的鍵值和不存在的記錄可以返回不同的結(jié)果。
二、讀取命令
1、get
get命令的key可以表示一個(gè)或者多個(gè)鍵,鍵之間以空格隔開
2、gets
可以看到,gets命令比普通的get命令多返回了一個(gè)數(shù)字(上圖中為13)。這個(gè)數(shù)字可以檢查數(shù)據(jù)是否發(fā)生改變。當(dāng)key對(duì)應(yīng)的數(shù)據(jù)改變時(shí),這個(gè)多返回的數(shù)字也會(huì)改變。
3、cas
cas即checked and set的意思,只有當(dāng)最后一個(gè)參數(shù)和gets所獲取的參數(shù)匹配時(shí)才能存儲(chǔ),否則返回“EXISTS”。
三、狀態(tài)命令
1、stats
2、stats items
執(zhí)行stats items,可以看到STAT items行,如果memcached存儲(chǔ)內(nèi)容很多,那么這里也會(huì)列出很多的STAT items行。
3、stats cachedump slab_id limit_num
我們執(zhí)行stats cachedump 1 0 命令效果如下:
這里slab_id為1,是由2中的stats items返回的結(jié)果(STAT items后面的數(shù)字)決定的;limit_num看起來好像是返回多少條記錄,猜的一點(diǎn)不錯(cuò), 不過0表示顯示出所有記錄,而n(n>0)就表示顯示n條記錄,如果n超過該slab下的所有記錄,則結(jié)果和0返回的結(jié)果一致。
通過stats items、stats cachedump slab_id limit_num配合get命令可以遍歷memcached的記錄。
4、其他stats命令
如stats slabs,stats sizes,stats reset等等使用也比較常見。
四、其他常見命令
1、append
在現(xiàn)有的緩存數(shù)據(jù)后添加緩存數(shù)據(jù),如現(xiàn)有緩存的key不存在服務(wù)器響應(yīng)為NOT_STORED。
2、prepend
和append非常類似,但它的作用是在現(xiàn)有的緩存數(shù)據(jù)前添加緩存數(shù)據(jù)。
3、flush_all
該命令有一個(gè)可選的數(shù)字參數(shù)。它總是執(zhí)行成功,服務(wù)器會(huì)發(fā)送 “OK\r\n” 回應(yīng)。它的效果是使已經(jīng)存在的項(xiàng)目立即失效(缺省),或在指定的時(shí)間后。此后執(zhí)行取回命令,將不會(huì)有任何內(nèi)容返回(除非重新存儲(chǔ)同樣的鍵名)。 flush_all 實(shí)際上沒有立即釋放項(xiàng)目所占用的內(nèi)存,而是在隨后陸續(xù)有新的項(xiàng)目被儲(chǔ)存時(shí)執(zhí)行(這是由memcached的懶惰檢測(cè)和刪除機(jī)制決定的)。
flush_all 效果是它導(dǎo)致所有更新時(shí)間早于 flush_all 所設(shè)定時(shí)間的項(xiàng)目,在被執(zhí)行取回命令時(shí)命令被忽略。
4、其他命令
memcached還有很多命令,比如對(duì)于存儲(chǔ)為數(shù)字型的可以通過incr/decr命令進(jìn)行增減操作等等,這里只列出開發(fā)和運(yùn)維中經(jīng)常使用的命令,其他的不再一一舉例說明。
補(bǔ)充一則:簡(jiǎn)單認(rèn)識(shí).net framework中的幾種緩存
web站點(diǎn)中緩存的重要性毋庸置疑。我想很多asp.net開發(fā)人員在開發(fā)web應(yīng)用系統(tǒng)的時(shí)候優(yōu)先考慮使用的緩存并不是第三方緩存解決方案(比如分布式緩存memcached、redis等等),而應(yīng)該是.net framework已經(jīng)提供的多種緩存解決方案。下面結(jié)合自己的開發(fā)經(jīng)驗(yàn)談?wù)剬?duì).net framework中緩存的認(rèn)識(shí)。
1、System.Web.Caching.Cache
估計(jì)大部分做過asp.net開發(fā)的人都用過這個(gè)命名空間下的緩存,我們可以直接使用HttpContext.Current.Cache實(shí)例而不用實(shí)例化。當(dāng)然這個(gè)命名空間下的Cache類是允許您實(shí)例化的,需要定制自己的緩存系統(tǒng)的當(dāng)然可以完全自己控制如何初始化這個(gè)類。我在園子里看到過有很多文章介紹Cache的CRUD輔助類庫(kù)大多數(shù)都是針對(duì)System.Web.Caching.Cache。
需要說明的是,我們還可以通過該命名空間下的HttpRuntime.Cache實(shí)現(xiàn)web、控制臺(tái)、winform等不同表現(xiàn)形式下的緩存,而且完全無需自己實(shí)例化。HttpRuntime.Cache是之前個(gè)人開發(fā)中使用比較多的一個(gè)類,現(xiàn)在比較偏愛.net framework4.0中的增強(qiáng)型的緩存類MemoryCache。
2、Output Cache
眾所周知,輸出緩存主要分頁(yè)面輸出緩存和頁(yè)面部分緩存。說白了,就是緩存整個(gè)頁(yè)面的html或者部分html,本來沒什么值得討論的,但是最近看到dudu的
這篇博客才恍然發(fā)現(xiàn),想不到使用它還真是大有講究,我以前怎么就沒有發(fā)現(xiàn)這個(gè)問題呢?看來發(fā)現(xiàn)問題和解決問題的能力同樣重要,有時(shí)候前者甚至更重要啊。
3、System.Runtime.Caching
現(xiàn)在個(gè)人開發(fā)中使用最多的類MemoryCache出自這個(gè)命名空間,使用前需要引用using System.Runtime.Caching。MemoryCache繼承自O(shè)bjectCache, IEnumerable, IDisposable,其中ObjectCache是個(gè)抽象類。用過MemoryCache的人都知道,這個(gè)MemoryCache有一個(gè)屬性叫Default,通常可以像下面這樣使用:
private static ObjectCache memCache = MemoryCache.Default;
當(dāng)然我們也完全可以通過public MemoryCache(string name, NameValueCollection config = null)構(gòu)造函數(shù)初始化緩存對(duì)象。
接著我們可以在web.config文件中配置每個(gè)MemoryCache實(shí)例運(yùn)行的內(nèi)存使用配額方案和配額檢查周期,下面示例參考
MSDN:
<system.runtime.caching> <memoryCache> <namedCaches> <add name="Default" cacheMemoryLimitMegabytes="10" pollingInterval="00:02:00"/> </namedCaches> </memoryCache> </system.runtime.caching>
這些配置意義在于可以明確指定每個(gè)MemoryCache實(shí)例運(yùn)行的內(nèi)存使用配額方案和配額檢查周期。比如我們可以通過配置來按需更改MemoryCache.Default實(shí)例的內(nèi)存配額(不知道緩存可用最大內(nèi)存是多少,可能還是傳說中的800M左右)。緩存過期策略與其它的緩存框架大同小異,與System.Web.Caching.Cache的不同只是名稱不叫CacheDependency,而叫
ChangeMonitor,并且提供了基于文件和目錄的緩存依賴策略。關(guān)于緩存過期策略也比較有探討的必要,不過個(gè)人開發(fā)中比較偏重于數(shù)據(jù)緩存和替換,目前還沒有接觸和使用過比較完美的過期策略解決方案。
參考:
http://code.google.com/p/memcached/wiki/NewCommandshttp://msdn.microsoft.com/zh-cn/library/system.runtime.caching.memorycache.aspxhttp://www.cnblogs.com/dudu/archive/2011/11/03/outputcache_Bug_vary.htmlhttp://msdn.microsoft.com/zh-cn/library/system.web.caching.cache(v=VS.100).aspx