1.Memcached簡介
Memcached是一個開源、高性能,將資料分布于記憶體中并使用key-value存盤結構的快取系統,它通過在記憶體中快取資料來減少向資料庫的頻繁訪問連接的次數,可以提高動態、資料庫驅動之類網站的運行速度,
Memcached在使用是比較簡單的,在操作上基本就類似于操作字典結構的物件一樣,分布式快取Memcached的分布式怎么理解?簡單來說就是Memcached通過建立一個系統服務和應用系統完全獨立開,兩則不是相同的行程,
2.為什么需要用到Memcached?
在搭建服務器架構時如果使用到了集群,那么代理服務器會根據集群中服務器負載均衡分發到一個負載較小的服務器處理請求,就拿“登錄”場景來說,第一次用戶進行登錄成功后在A服務器上將用戶資訊存盤到Session,當用戶第二次請求去加載某個頁面時,由于負載均衡的調度將請求交給了另一臺服務器C來處理,此時的C服務器是并不能訪問到A服務器的Session,那么一般的程式邏輯會再一次讓你回傳登錄頁面重新進行登錄(引發的問題)
對應上述文字描述的參考圖:

根據上述引發的問題,實際上我們需要達到一個效果是:將我們登錄存盤的用戶資訊放置到一個共享區域,也就是集群中的每個服務器都能訪問的區域,對于建立這個共享區域,其實就可以通過使用分布式快取Memcached來解決,當然還包括另外一個原因,如果統一將資訊放到Session存盤,對于單機架構的模式的服務器是很消耗記憶體的,當然也有特殊的手段實作跨服務器的Seesion訪問,但是也會造成很大的性能損耗,是并不推崇的,所以會通過分布式快取Memcached將應用和快取隔離開作為單獨的服務行程,
通過使用分布式快取Memcached會將集群中服務器的記憶體統一使用起來形成一個獨立的資料共享區域,加入Memcached后架構參考圖如下:

分布式快取Memcached需要結合服務器架構的實際情況來使用,如果業務量沒有很大并且本身設計的是單機服務器架構,那么其實沒有并要使用分布式快取Memcached,使用Session或者ASP.NET類別庫中的Cache來快取資料亦可,
分布式快取還有一種應用場景:例如像CSDN這樣的大型站點,其中包含下載、論壇、資訊各類子站,這個時候只要在某個子站登錄成功,在訪問旗下其他的子站時因為運用了分布式快取技術后,子站之間可以共享用戶資訊則無需再近進行登錄,
3.Memcached流程原理簡介

4.Memcached的優勢和不足
優勢:
資料在處理上速度快,操作簡單,開源易擴展,
不足:
1.由于資料是存盤在記憶體中,并且具有臨時性不能持久化保存,如果服務器宕機或者發生重啟等情況,就會發生資料丟失,同型別的資料庫Redis可以彌補這種現象,
2.在獲取資料上只能局限于通過鍵讀獲取資料,不支持多元化的查詢方式,
5.Memcached使用說明
5.1.Windows中安裝和配置
1.將memcached安裝目錄解壓到指定目錄(不能包含在中文名稱目錄下),memcached目錄中的檔案結構參考如下:

2.以管理員身份打開CMD命令列視窗在打開memcached安裝目錄,輸入:memcached.exe -d install(安裝服務),然后在輸入memcached.exe -d start(啟動服務),
參考圖:

3.安裝啟動后可以在系統中查看到對應的服務狀態:

5.2.版本及配置資訊
可以通過在telnet命令列中輸入“stats”查看memcached版本及配置資訊:

5.3.記憶體分配
Memcached默認記憶體存盤資料的最大容量是64mb,如需修改則在命令列中輸入:
memcached.exe -m 512 -d start
5.4.埠配置
Memcached默認的埠是11211,如需修改則在命令列中輸入:
memcached.exe -p 10001 -d start
5.5.CMD中操作資料的命令格式
如果需要在CMD中對memcached進行資料的操作則需要遵守下面的命令格式:
command <key> <flags> <expiration time> <bytes> <value>
以上格式含義解釋:
Command:具體操作的命令,其中包括:set、add、replace、get、delete;
Key:自定義的查找標識;
Flags:除了存盤鍵值資料,此處用于存盤額外的資料;
expiration time:資料的有效時間(以秒為單位),0表示永遠;
Bytes:表示存盤的value占用的位元組數;
Value:存盤的值(在輸入命令格式中必須單獨位于第二行);
5.6.操作實體Set(新增或修改)方法:
1.以管理員身份打開CMD命令列,并打開memcached的安裝檔案目錄,然后在命令列輸入:telnet IP 埠號:

進行回車后彈出黑屏視窗說明連接成功:

2.寫入鍵值資料
在空白處進行回車換行輸入操作命令:
set name 0 120 5 Tom
輸入完成后敲擊回車提交,成功后如下:

3.以鍵取值

6.Memcached管理工具TreeNMS
TreeNMS是由treesoft開發的資料可視化客戶端工具,可以通過界面方式對memcached資料庫進行管理、維護,該工具不光適用于Memcached還包括其他的NoSql型資料庫如Redis,
下載地址:http://www.treesoft.cn/dms.html#exam
在這里就不提供詳細的說明了,通過下載后檔案夾中有一份部署說明,根據里面的步驟操作即可,系統參考圖:

PS:當通過工具查閱資料的時候可能會看到亂碼,實際上糟程式讀取值的時候不會存在亂碼,請忽略此情況,
7.在.Net中使用Memcached
在.Net中使用Memcached進行開發主要依靠的是第三方提供的SDK,使用時將SDK集成到專案中完成一些列的編碼操作,常見SDK有:Enyim.Caching、MemcachedClientLibrary、ServiceStack,下面主要針對最常用的MemcachedClientLibrary來講解代碼的使用,
使用前必須參考的程式集:

鏈接:https://pan.baidu.com/s/1Rbe3QhuCefRtg12WZ9GcMw
提取碼:dx6y
DEMO代碼如下:
1 class Program 2 { 3 4 5 6 static void Main(string[] args) 7 { 8 9 10 #region 初始化配置 11 /* 12 *Memcached.ClientLibrary使用初始化,這里只介紹關鍵的代碼步驟 13 * 如要自定義配置則自行查閱相關檔案進行擴展 14 */ 15 16 17 /*Step1 18 *獲取集群中所有服務器IP,Memcached存盤資料時會根據演算法在集群中選擇一臺進行存盤操作, 19 *集群中的服務器部署了Memcached服務,則集群中多臺服務器都會各自提供記憶體使用, 20 *從而達到跨服務器訪問記憶體資料能力 21 */ 22 string[] ips = new string[] { 23 "192.168.31.12:11211", 24 "192.168.31.151:11211" 25 }; 26 27 /*Step2 28 *創建并初始化通信池,Memcached是基于Socket進行通信的 29 */ 30 string sockIOPoolName = "firstPool"; 31 SockIOPool pool = SockIOPool.GetInstance(sockIOPoolName); 32 pool.SetServers(ips); 33 pool.Initialize(); 34 35 36 /*Step3 37 *創建并初始化客戶端操作物件 38 */ 39 MemcachedClient MClient = new MemcachedClient(); 40 MClient.PoolName = sockIOPoolName; 41 42 #endregion 43 44 45 #region 資料操作 46 //資料操作 47 48 /* 49 *新增或修改使用Set方法,因為方法邏輯是:不存在則插入,存在覆寫更新 50 * 傳參:1:key、2:value、3:到期時間 51 */ 52 53 //存盤單值 54 MClient.Set("name", "Jay", DateTime.Now.AddDays(1)); 55 56 //存盤物件 57 MClient.Set("Car", new Car { ID = 1, Name = "RX8" }, DateTime.Now.AddDays(1)); 58 59 //讀取 60 var uidData = https://www.cnblogs.com/green-jcx/p/MClient.Get("Car"); 61 62 if (false) 63 { 64 //洗掉資料 65 MClient.Delete("name"); 66 //清空資料庫 67 MClient.FlushAll(); 68 } 69 #endregion 70 71 //基本的操作介紹完畢 72 Console.WriteLine("ok"); 73 74 } // END Main() 75 76 77 78 79 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1135.html
標籤:NoSQL
上一篇:mongo添加索引及索引相關方法
