閱讀目錄
1.MemCached是什么?
2.Window中MemCached安裝
3.MemCached命令
4.簡單示例
MemCached是什么
MemCached是一個自由開源,高性能,分布式內存對象緩存系統。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟件。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素。
MemCached是一種基於內存的key-value存儲,用來存儲小塊的任意數據。實現原理就是,第一次從數據庫獲取到結果之后,同時將結果保存在內存中,從而簡單對數據庫的訪問次數,以提高Web應用的速度。
Memcached 官網:http://memcached.org/。
Window中MemCached安裝
下載地址:http://pan.baidu.com/s/1yVILw 提取密碼:5gx9
下載完成后
1、打開SetupFile安裝文件夾。
2、以管理員身份打開cmd,輸入以下命令
3、安裝成功之后,要去服務中啟動memcached服務。
MemCached命令
MemCached中有很多命令,大概可分為增加、更新、獲取和刪除緩存數據,下面簡單介紹幾種常用的命令;
Set
用於將value(數據值)存儲到指定的key(鍵)中。
如果set的key已經存在,該命令會更新該key所對應的原來的數據,也就是實現了更新的作用。
Add
用於將value(數據值)存儲到指定的key(鍵)中。
如果 Add 的 key 已經存在,則不會更新數據,之前的值將仍然保持相同,並且您將獲得響應 NOT_STORED。
Get
Get命令獲取存儲在 key(鍵) 中的 value(數據值) ,如果 key 不存在,則返回空。
Delete
用於刪除已存在的 key(鍵)。
flush_all
flush_all 命令用於清理緩存中的所有 key=>value(鍵=>值) 對。
該命令提供了一個可選參數 time,用於在制定的時間后執行清理緩存操作。
簡單示例
新建一個控制台程序,從下載的目錄中添加ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll三個組件,新建一個MemCached管理類,具體代碼如下:

/// <summary> /// 分布式緩存的MemCached管理器 /// </summary> public class MemCachedManager { public static MemcachedClient cache; static MemCachedManager() { string[] servers = { "172.20.61.195:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); //設置服務器列表 pool.SetServers(servers); //設置各服務之間負責均衡的權重 pool.SetWeights(new int[] { 1 }); //初始化時創建連接數 pool.InitConnections = 3; //最小連接數 pool.MinConnections = 3; //最大連接數 pool.MaxConnections = 5; //連接的最大空閑時間,下面設置為6個小時(單位為ms),超過這個設置時間,連接會被釋放 pool.MaxIdle = 1000 * 60 * 60 * 6; //socket連接的超時時間,為0表示永不超時,即一直保持連接狀態 pool.SocketConnectTimeout = 0; //通訊的超時時間,下面設置為3秒,.net版本沒有實現 pool.SocketTimeout = 1000 * 3; //維護線程的間隔激活時間,下面設置為30秒(單位s),設置為0時表示不啟用維護線程 pool.MaintenanceSleep = 30; //設置SocketIO池的故障標志 pool.Failover = true; //是否對TCP/IP通訊使用nalgle算法,.net版本沒有實現 pool.Nagle = false; //socket單次任務的最大時間(單位ms),超過這個時間socket會被強行中斷,當前任務失敗 pool.MaxBusy = 1000 * 10; pool.Initialize(); cache = new MemcachedClient(); //是否啟用壓縮數據:如果啟用了壓縮,數據壓縮長於門檻的數據將被儲存在壓縮的形式 cache.EnableCompression = false; } }
其中IP是本機地址,端口是固定的,如果有多台服務器用於緩存,在數組列出對應的IP即可。
測試代碼:

public static void TestMethod() { //清除所有的緩存數據 MemCachedManager.cache.FlushAll(); var v1 = MemCachedManager.cache.Add("a", "123"); var res1 = MemCachedManager.cache.Get("a"); Console.WriteLine("第一次Add返回值{0},結果{1}", v1, res1); var v2 = MemCachedManager.cache.Add("a", "456"); var res2 = MemCachedManager.cache.Get("a"); Console.WriteLine("第二次Add返回值{0},結果{1}", v2, res2); var v3 = MemCachedManager.cache.Set("a", "789"); var res3 = MemCachedManager.cache.Get("a"); Console.WriteLine("Set返回值{0},結果{0}", res3); var v4 = MemCachedManager.cache.Replace("a", "123"); var res4 = MemCachedManager.cache.Get("a"); Console.WriteLine("replace返回值{0},結果{0}", res4); var v5 = MemCachedManager.cache.Replace("b", "123"); Console.WriteLine("replace返回值{0}", v5); MemCachedManager.cache.Set("b","456"); MemCachedManager.cache.Delete("b"); var v6= MemCachedManager.cache.KeyExists("b"); Console.WriteLine("Delete之后返回值{0}", v6); } }
運行結果: