一存儲命令
存儲命令的格式
?
<command name> <key> <flags> <exptime> <bytes>
<data block>
參數說明如下
<command name>
set/add/replace
<key>
查找關鍵字
<flags>
客戶機使用它存儲關於鍵值對的額外信息
<exptime>
該數據的存活時間
表示永遠
<bytes>
存儲字節數
<data block>
存儲的數據塊(可直接理解為key
value結構中的value)
添加
()無論如何都存儲的set
這個set的命令在memcached中的使用頻率極高set命令不但可以簡單添加如果set的key已經存在該命令可以更新該key所對應的原來的數據也就是實現更新的作用
可以通過“get 鍵名”的方式查看添加進去的記錄
如你所知我們也可以通過delete命令刪除掉然後重新添加
()只有數據不存在時進行添加的add
()只有數據存在時進行替換的replace
刪除
可以看到刪除已存在的鍵值和不存在的記錄可以返回不同的結果
二讀取命令
get
get命令的key可以表示一個或者多個鍵鍵之間以空格隔開
gets
可以看到gets命令比普通的get命令多返回了一個數字(上圖中為)這個數字可以檢查數據是否發生改變當key對應的數據改變時這個多返回的數字也會改變
cas
cas即checked and set的意思只有當最後一個參數和gets所獲取的參數匹配時才能存儲否則返回“EXISTS”
三狀態命令
stats
stats items
執行stats items可以看到STAT items行如果memcached存儲內容很多那麼這裡也會列出很多的STAT items行
stats cachedump slab_id limit_num
我們執行stats cachedump 命令效果如下
這裡slab_id為是由中的stats items返回的結果(STAT items後面的數字)決定的limit_num看起來好像是返回多少條記錄猜的一點不錯 不過表示顯示出所有記錄而n(n>)就表示顯示n條記錄如果n超過該slab下的所有記錄則結果和返回的結果一致
通過stats itemsstats cachedump slab_id limit_num配合get命令可以遍歷memcached的記錄
其他stats命令
如stats slabsstats sizesstats reset等等使用也比較常見
四其他常見命令
append
在現有的緩存數據後添加緩存數據如現有緩存的key不存在服務器響應為NOT_STORED
prepend
和append非常類似但它的作用是在現有的緩存數據前添加緩存數據
flush_all
該命令有一個可選的數字參數它總是執行成功服務器會發送 “OKrn” 回應它的效果是使已經存在的項目立即失效(缺省)或在指定的時間後此後執行取回命令將不會有任何內容返回(除非重新存儲同樣的鍵名) flush_all 實際上沒有立即釋放項目所占用的內存而是在隨後陸續有新的項目被儲存時執行(這是由memcached的懶惰檢測和刪除機制決定的)
flush_all 效果是它導致所有更新時間早於 flush_all 所設定時間的項目在被執行取回命令時命令被忽略
其他命令
memcached還有很多命令比如對於存儲為數字型的可以通過incr/decr命令進行增減操作等等這裡只列出開發和運維中經常使用的命令其他的不再一一舉例說明
補充一則簡單認識net framework中的幾種緩存
web站點中緩存的重要性毋庸置疑我想很多aspnet開發人員在開發web應用系統的時候優先考慮使用的緩存並不是第三方緩存解決方案(比如 分布式緩存memcachedredis等等)而應該是net framework已經提供的多種緩存解決方案下面結合自己的開發經驗談談對net framework中緩存的認識
SystemWebCachingCache
估計大部分做過aspnet開發的人都用過這個命名空間下的緩存我們可以直接使用HttpContextCurrentCache實例而不 用實例化當然這個命名空間下的Cache類是允許您實例化的需要定制自己的緩存系統的當然可以完全自己控制如何初始化這個類我在園子裡看到過有很多 文章介紹Cache的CRUD輔助類庫大多數都是針對SystemWebCachingCache
需要說明的是我們還可以通過該命名空間下的HttpRuntimeCache實現web控制台winform等不同表現形式下的緩存而且 完全無需自己實例化HttpRuntimeCache是之前個人開發中使用比較多的一個類現在比較偏愛net framework中的增強型的緩存類MemoryCache
Output Cache
眾所周知輸出緩存主要分頁面輸出緩存和頁面部分緩存說白了就是緩存整個頁面的html或者部分html本來沒什麼值得討論的但是最近看到dudu的這篇博客才恍然發現想不到使用它還真是大有講究我以前怎麼就沒有發現這個問題呢?看來發現問題和解決問題的能力同樣重要有時候前者甚至更重要啊
SystemRuntimeCaching
現在個人開發中使用最多的類MemoryCache出自這個命名空間使用前需要引用using SystemRuntimeCachingMemoryCache繼承自ObjectCache IEnumerable IDisposable其中ObjectCache是個抽象類用過MemoryCache的人都知道這個MemoryCache有一個屬性叫 Default通常可以像下面這樣使用
private static ObjectCache memCache = MemoryCacheDefault;
當然我們也完全可以通過public MemoryCache(string name NameValueCollection config = null)構造函數初始化緩存對象
接著我們可以在webconfig文件中配置每個MemoryCache實例運行的內存使用配額方案和配額檢查周期下面示例參考MSDN
<systemruntimecaching>
<memoryCache>
<namedCaches>
<add name="Default" cacheMemoryLimitMegabytes="" pollingInterval="::"/>
</namedCaches>
</memoryCache>
</systemruntimecaching>
這些配置意義在於可以明確指定每個MemoryCache實例運行的內存使用配額方案和配額檢查周期比如我們可以通過配置來按需更改 MemoryCacheDefault實例的內存配額(不知道緩存可用最大內存是多少可能還是傳說中的M左右)緩存過期策略與其它的緩存框架 大同小異與SystemWebCachingCache的不同只是名稱不叫CacheDependency而叫ChangeMonitor並且提供了基於文件和目錄的緩存依賴策略關於緩存過期策略也比較有探討的必要不過個人開發中比較偏重於數據緩存和替換目前還沒有接觸和使用過比較完美的過期策略解決方案
From:http://tw.wingwit.com/Article/program/PHP/201311/21342.html