.NET中MemCached使用介紹


閱讀目錄

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

官方網站:http://memcached.org/

下載完成后

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;
        }
}
View Code

其中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);
        }
    }
View Code

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM