C# Memcache叢集原理、客戶端配置詳細解析
概述
memcache是一套開放源的分散式快取記憶體系統。由服務端和客戶端組成,以守護程式(監聽)方式運行於一個或多個伺服器中,隨時會接收客戶端的連線和操作。memcache主要把資料物件快取到記憶體中,通過在記憶體裡維護一個統一的巨大的hash表。簡單的說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。memcache基於一個儲存鍵/值對的hashmap進行儲存物件到記憶體中。memcache是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護程序通訊。
特性:
•在 Memcached中可以儲存的item資料量是沒有限制的,只要記憶體足夠 。
•Memcached單程序在32位系統中最大使用記憶體為2G,若在64位系統則沒有限制,這是由於32位系統限制單程序最多可使用2G記憶體,要使用更多記憶體,可以分多個埠開啟多個Memcached程序 。
•最大30天的資料過期時間,設定為永久的也會在這個時間過期,常量REALTIME_MAXDELTA
•單個item最大資料是1MB,超過1MB資料不予儲存,常量POWER_BLOCK 1048576進行控制
Memcache叢集原理
Memcache:通過客戶端驅動實現叢集。Redis、MongoDb:通過伺服器端實現叢集;Memcache初始化驅動的時候,可以給定一個集合,如
1 string[] servers = { "172.20.10.7:11211","172.20.10.8:11211"};
驅動實現叢集原理圖
Memcache優缺點:
1、不能作為持久化儲存
2、儲存資料有限:1M【大於1M,人為進行分割】
3、儲存只能key-value
4、叢集資料沒有複製和同步機制。【奔潰不會影響程式,沒有主從複製機制(沒有額外複製開銷)】
5、記憶體回收不是很及時,LRU:未使用記憶體>過期記憶體>最近最少使用記憶體 惰性刪除(也算是缺點)
好了,我們現在大概知道Memcache幹什麼用的呢,其實方法很簡單,請參考我上篇部落格:https://www.cnblogs.com/chenyanbin/p/11415368.html
程式碼實現:
1、下載dll客戶端類庫
地址:https://sourceforge.net/projects/memcacheddotnet/
百度雲盤:
連結:https://pan.baidu.com/s/1tIkdYdp8rkKtXMeOeT24AA
提取碼:5yk2
2、引入類庫
3、新增引用
4、 程式碼
1 //分散式Memcached伺服器ip 埠 2 string[] servers = { "172.20.10.7:11211"}; //Memcache機器IP 3 //初始化池 4 SockIOPool pool = SockIOPool.GetInstance(); 5 pool.SetServers(servers); //關聯連線池 6 pool.InitConnections = 3; //初始化連結 7 pool.MinConnections = 3; //最小連線數 8 pool.MaxConnections = 5; //最大連線數 9 pool.SocketConnectTimeout = 1000; //Socket超時連線時間 10 pool.SocketTimeout = 3000; //Socket超時時間 11 pool.MaintenanceSleep = 30; //Socket休眠時間 12 pool.Failover = true; 13 pool.Nagle = false; 14 pool.Initialize(); //初始化 15 //客戶端例項 16 MemcachedClient mc = new MemcachedClient(); 17 mc.EnableCompression = false; //啟動壓縮 18 mc.Add("keykey", "valuevalue"); //新增 19 //mc.Delete("keykey"); //刪除 20 //mc.Set("", ""); //設定 21 //mc.Get(""); //獲取
實現:
成功
示例DEMO
連結:https://pan.baidu.com/s/1QhHEO71jMDCbZ72lbFNNcw
提取碼:0a5i
如果這篇文章對你有幫助,幫忙推薦下,有不懂的地方歡迎下方留言~~