C# Memcache集群原理、客戶端配置詳細解析

  • 2019 年 10 月 3 日
  • 筆記

概述

  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

如果這篇文章對你有幫助,幫忙推薦下,有不懂的地方歡迎下方留言~~