1. 程式人生 > >C# Memcache叢集原理、客戶端配置詳細解析

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

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