NET中的Memcached.ClientLibrary使用詳解

來源:互聯網
上載者:User

標籤:

memcached在windows下的下載與安裝

:http://pan.baidu.com/s/1yVILw       提取密碼:5gx9

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

下載完成後

1、開啟SetupFile安裝資料夾

2、開啟cmd命令介面。           不要忘啦去windows服務中把服務啟動了。

3、 以上的安裝和啟動都是在預設環境下進行的,在安裝時可設定如下參數: 

-p 監聽的連接埠 
-l 串連的IP地址, 預設是本機 
-d start 啟動memcached服務 
-d restart 重起memcached服務 
-d stop|shutdown 關閉正在啟動並執行memcached服務 
-d install 安裝memcached服務 
-d uninstall 卸載memcached服務 
-u 以的身份運行 (僅在以root啟動並執行時候有效) 
-m 最大記憶體使用量,單位MB。預設64MB 
-M 記憶體耗盡時返回錯誤,而不是刪除項 
-c 最大同時串連數,預設是1024 
-f 塊大小增長因子,預設是1.25 
-n 最小分配空間,key+value+flags預設是48 
-h 顯示協助

4、對這樣你就安裝好啦。下面看我們怎麼用c#語言操作memcached啦。

先把memcached用起來

1、下載用戶端的3個dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll

2、建立一個簡單控制台應用程式

class AMemcached    {        public static MemcachedClient cache;        static AMemcached()        {            string[] servers = { "172.18.5.66: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串連的逾時時間,下面設定表示不逾時(單位ms),即一直保持連結狀態            pool.SocketConnectTimeout = 0;            //通訊的超市時間,下面設定為3秒(單位ms),.Net版本沒有實現            pool.SocketTimeout = 1000 * 3;            //維護線程的間隔啟用時間,下面設定為30秒(單位s),設定為0時表示不啟用維護線程            pool.MaintenanceSleep = 30;            //設定SocktIO池的故障標誌            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;            //壓縮設定,超過指定大小的都壓縮             //cache.CompressionThreshold = 1024 * 1024;                   }    }    class Program    {        static void Main(string[] args)        {            //存入key為a,value為123的一個緩衝            AMemcached.cache.Add("a", "123");            //讀出key為a的緩衝值            var s = AMemcached.cache.Get("a");            //輸出            Console.WriteLine(s);            Console.ReadKey();                   }    }
View Code細品 .NET Memcached.ClientLibrary 

1、說說memcached分布式緩衝的設定與應用

string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };            //初始化池            SockIOPool pool = SockIOPool.GetInstance();            //設定伺服器列表            pool.SetServers(servers);            //各伺服器之間負載平衡的設定比例            pool.SetWeights(new int[] { 1, 10 });
View Code

Note:

1、在172.18.5.66,與192.168.10.121兩台機器上裝memcached服務端。

2、 pool.SetWeights這裡的1跟10意思是,負載平衡比例,假如11000條資料,大致資料分布為:172.18.5.66分布1000條資料左右。另外一台為10000條左右。

3、memcached服務端並不具備負載平衡的能力,而是memcachedClient實現的,具體存取資料實現的核心是採用一致性Hash演算法,把key-value分布到某一台伺服器中裡邊。

2、說說memcached的資料壓縮機制

            //是否啟用壓縮資料:如果啟用了壓縮,資料壓縮長於門檻的資料將被儲存在壓縮的形式            cache.EnableCompression = false;            //壓縮設定,超過指定大小的都壓縮             //cache.CompressionThreshold = 1024 * 1024; 

Note:

1、這個處理是在MemcachedClient對象中,設定這個EnableCompression屬性,是否使用壓縮的意思,如果啟用啦壓縮功能 ,則ICSharpCode.SharpZipLib類庫會在資料超過預設大小時,進行資料壓縮處理。

2、CompressionThreshold這個屬性是壓縮的閥值,預設是15K,如果超過設定的閥值則使用memcached的通訊協議,存資料時給每個資料項目分配一個16為的flag表示,用作記錄是否有壓縮,如果有壓縮則提取資料是進行解壓。如果沒有超過閥值則不壓縮,直接儲存。

3、說說怎麼使用用戶端多個SocketIO池 

class AMemcached    {        public MemcachedClient cache;        public  AMemcached(string poolName)        {            string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };            //初始化池            SockIOPool pool = SockIOPool.GetInstance(poolName);            //設定伺服器列表            pool.SetServers(servers);            //各伺服器之間負載平衡的設定比例            pool.SetWeights(new int[] { 1, 10 });            //初始化時建立串連數            pool.InitConnections = 3;            //最小串連數            pool.MinConnections = 3;            //最大串連數            pool.MaxConnections = 5;            //串連的最大空閑時間,下面設定為6個小時(單位ms),超過這個設定時間,串連會被釋放掉            pool.MaxIdle = 1000 * 60 * 60 * 6;            //socket串連的逾時時間,下面設定表示不逾時(單位ms),即一直保持連結狀態            pool.SocketConnectTimeout = 0;            //通訊的逾時時間,下面設定為3秒(單位ms),.Net版本沒有實現            pool.SocketTimeout = 1000 * 3;            //維護線程的間隔啟用時間,下面設定為30秒(單位s),設定為0時表示不啟用維護線程            pool.MaintenanceSleep = 30;            //設定SocktIO池的故障標誌            pool.Failover = true;            //是否對TCP/IP通訊使用nalgle演算法,.net版本沒有實現            pool.Nagle = false;            //socket單次任務的最大時間(單位ms),超過這個時間socket會被強行中端掉,當前任務失敗。            pool.MaxBusy = 1000 * 10;            // 初始化一些值並與MemcachedServer段建立串連            pool.Initialize();            cache = new MemcachedClient();            //是否啟用壓縮資料:如果啟用了壓縮,資料壓縮長於門檻的資料將被儲存在壓縮的形式            cache.EnableCompression = false;            //壓縮設定,超過指定大小的都壓縮             //cache.CompressionThreshold = 1024 * 1024;               //指定用戶端訪問的SockIO池            cache.PoolName = poolName;        }    }    class Program    {        static void Main(string[] args)        {            //存入key為a,value為123的一個緩衝            new AMemcached("me").cache.Add("b", 123);            //讀出key為a的緩衝值            var s = new AMemcached("me").cache.Get("b");            //輸出            Console.WriteLine(s);            Console.ReadKey();                   }    }
View Code

Note:使用SocketIoPool的情境,假如你的系統中用到A,B兩台機器memcached的快取資料,而A,B是不相關的,沒有資料互連共用,那麼這個時候你就可以根據設定poolName來處理讀寫那台機器。而不用多處,重複配置用戶端的各種參數。

4、說說memcached的容錯移轉處理 

  //設定SocktIO池的故障標誌            pool.Failover = true;

Note:memcached的鼓掌轉移是一套正常節點發生故障變為死節點時的處理機制。

1、開啟容錯移轉:如果發生socket異常,則該節點被添加到存放死節點屬性的_hostDead中,新請求被映射到dead server,檢測嘗試串連死節點的時間間隔屬性_hostDeadDuration(預設設定為100ms),如果沒有達到設定的間隔時間則key會被映射到可用的server處理,如果達到了時間間隔,則嘗試重新連結,串連成功將此節點從_hostDead中去除,串連失敗則間隔時間翻倍存放,下次重新連線時間會被拉長。

2、不開啟容錯移轉:新的請求都會被映射到dead server上,嘗試重建立立socket連結,如果串連失敗,返回null或者操作失敗。

5、說說key-value中的key與value

1、key在服務端的長度限制為250個字元,建議使用較短的key但不要重複。

2、value的大小限制為1mb,如果大拉,可以使用壓縮,如果還大,那可能拆分到多個key中。

 

NET中的Memcached.ClientLibrary使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.