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

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


免責聲明!

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



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