程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# memcache 應用引見

C# memcache 應用引見

編輯:C#入門知識

C# memcache 應用引見。本站提示廣大學習愛好者:(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停止掌握

Windows下裝置Memcache

  懂得memcache一些根本信息後,在來測驗考試在windows下裝置memcache辦事端。
1.起首下載memcache裝置文件:【裝置包】。裝置包外面會有x64和x86兩個文件夾,依據操作體系選擇一個翻開會找到memcached.exe。這個文件不克不及直接雙擊運轉裝置,須要經由過程cmd停止裝置。
2.裝置步調如圖所示:

步調:

1.窗口+R:輸出cmd
2.停止G盤: 輸出 G:
3.停止Memcached for window 32/64的裝置目次:輸出 cd CK\memcached_en32or64\x64
4.裝置memcached:輸出 memcached -d install
5.啟動辦事:輸出 memcached -d start

啟動辦事後在Windows過程中可以看到memcached.exe.

memcached -d start|stop|shutdown|restart|uninstall|install 啟動|停滯|封閉|重啟|卸載|裝置。

裝置步調不是很龐雜。第一:找到文件(memcached.exe)途徑。第二: memcached -d install 就OK..

根本默許參數解釋:

-p 監聽的端口
-l 銜接的IP地址, 默許是本機
-d start 啟動memcached辦事
-d restart 重起memcached辦事
-d stop|shutdown 封閉正在運轉的memcached辦事
-d install 裝置memcached辦事
-d uninstall 卸載memcached辦事
-u 以的身份運轉 (僅在以root運轉的時刻有用)
-m 最年夜內存應用,單元MB。默許64MB
-M 內存耗盡時前往毛病,而不是刪除項
-c 最年夜同時銜接數,默許是1024
-f 塊年夜小增加因子,默許是1.25
-n 最小分派空間,key+value+flags默許是48
-h 顯示贊助

辦事器操作完成後,我們可以在本機telnet 到辦事測試一個下。(假如提醒telnet敕令不存在,須要去控件面板開啟windows的tel辦事功效, win7的開啟tel功效操作步調是:【掌握面板】->【法式和功效】->【翻開或封閉window功效】,然後找到並勾選tel相干便可。其他window體系步調相似。)

測試telnet能否正常運轉 telnet 172.21.0.192 11211

進入後先按ctrl+]啟動回示功效,不然沒法看到輸出信息。回示功效啟動勝利後以下圖:

然後按回車輸出參數stats:

裝置和測試任務已完成..

實例代碼

有許多C#版本的Memcached客戶端法式。在這裡我們應用的是Memcached.ClientLibrary.dll客戶端挪用辦法,挪用須要二個DLL:

Memcached.ClientLibrary.dll (Memcached客戶端類庫)

log4net.dll (log4net是為Memcached供給日記記載) DLL下載地址:【點擊下載】

在項目中援用這個二個dll,援用log4net.dll後還需停止一系列設置裝備擺設任務。在上篇博客中有對log4net的設置裝備擺設引見。

【Log4Net 日記設置裝備擺設[附帶源碼]】

留意:Memcached.ClientLibrary.dll和log4net.dll有版本對應關系。

2.假如應用WinForm或掌握台運用法式把log4net的設置裝備擺設文件自力湧現,和寫在App.config外面須要小小設置一下。

如圖:Log4Net.config屬性“復制到輸入目次”:“一直復制”。否則在bin目次下找不到對應設置裝備擺設信息會發生報錯。

memcache基於一個存儲鍵/值對的hashmap停止存儲對象到內存中。所以我們可以懂得為重要在操作hashmap的鍵值對。

以下是一些簡略操作[增,刪,改,查,設置過時時光]:

//參數設置
string SockIOPoolName = "Test_SockIOPoolName";
string[] MemcacheServiceList = { "172.21.0.192:11211" };

//設置銜接池
SockIOPool SPool = SockIOPool.GetInstance(SockIOPoolName);
SPool.SetServers(MemcacheServiceList);
SPool.Initialize();

//實例化Client
MemcachedClient MClient = new MemcachedClient();
MClient.PoolName = SockIOPoolName;

Console.WriteLine("1.創立memcache緩存Hello World");
MClient.Add("Key1001", "Hello World");
Console.WriteLine("2.查詢緩存信息{0}", MClient.Get("Key1001"));

Console.WriteLine("3.修正memcache緩存Hello World");
MClient.Set("Key1001", "Hello World - 修正版");
Console.WriteLine("4.查詢緩存信息{0}", MClient.Get("Key1001"));

if (MClient.KeyExists("Key1001"))
{
 Console.WriteLine("5.刪除memcache緩存");
 MClient.Delete("Key1001");
}

if (MClient.KeyExists("Key1001"))
 Console.WriteLine(MClient.Get("Key1001"));
else
 Console.WriteLine("6.刪除已刪除");

Student stud = new Student() { id = "10001", name = "張三" };
MClient.Add("student", stud);
Student Get_stud = MClient.Get("student") as Student;
Console.WriteLine("6.緩存實體對象:{0} {1}", Get_stud.id, Get_stud.name);

MClient.Add("Key1002", "我已設置過時時光1分鐘", DateTime.Now.AddMinutes(1));
while (true)
{
 if (MClient.KeyExists("Key1002"))
 {
 Console.WriteLine("key:Key1002 Value:{0},以後時光:{1}", MClient.Get("Key1002"), DateTime.Now);
 Thread.Sleep(20000);
 }
 else
 {
 Console.WriteLine("key:Key1002 我已過時,以後時光:{0}", DateTime.Now);
 break;
 }
}

輸入成果:

Memcached緩存過時機制:

惰性刪除:它並沒有供給監控數據過時的機制,而是惰性的,當查詢到某個key數據時,假如過時那末直接擯棄。

好比鍵key1002在2015-04-09 13:54 :18 我設置他的值為:”我已設置過時時光1分鐘“。他的過時時光為1分鐘。比及2015-04-09 13:55 :18時數據應當過時,但在內存中照樣會保留這條數據,而是等客戶端來要求這條數據時斷定數據能否過時。過時就直接刪除前往空。假如內存滿了memcached會把最長時光未應用到期的緩存記載給刪除,騰出空間持續應用。

Memcached散布存儲

上面假定memcached辦事器有node1~node3三台,運用法式要保留鍵名為“tokyo”、“kanagawa”、“chiba”、“saitama”、“gunma”的數據。

起首向memcached中添加“tokyo”。將“tokyo”傳給客戶端法式庫後,客戶端完成的算法就會依據“鍵”來決議保留數據的memcached辦事器。辦事器選定後,即敕令它保留“tokyo”及其值。

異樣,“kanagawa”、“chiba”、“saitama”、“gunma”都是先選擇辦事器再保留。接上去獲得保留的數據。獲得時也要將要獲得的鍵“tokyo”傳遞給函數庫。函數庫經由過程與數據保留時雷同的算法,依據“鍵”選擇辦事器。應用的算法雷同,就可以選中與保留時雷同的辦事器,然後發送get敕令。只需數據沒有由於某些緣由被刪除,就可以取得保留的值。

如許,將分歧的鍵保留到分歧的辦事器上,就完成了memcached的散布式。memcached辦事器增多後,鍵就會疏散,即便一台memcached辦事器產生毛病沒法銜接,也不會影響其他的緩存,體系仍然能持續運轉。 (參考:memcached周全分析)

//參數
string[] MemcacheServiceList = { "172.21.0.192:11211", "172.21.0.28:11211", "172.21.13.246:11211" };

//設置銜接池
SockIOPool SPool = SockIOPool.GetInstance();
SPool.SetServers(MemcacheServiceList);
SPool.Initialize();

MemcachedClient MClient = new MemcachedClient();
MClient.FlushAll();

int count = 5;
var time = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
 MClient.Add(i.ToString(), "value" + i);
}
Console.WriteLine("memcached緩存創立勝利。耗時:{0}",time.ElapsedTicks);


time = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
 if (MClient.KeyExists(i.ToString()))
 {
 Console.WriteLine("key:{0}.value:{1}", i, MClient.Get(i.ToString()));
 }
 else
 {
 Console.WriteLine("--------未能查詢到數據key:{0}--------",i);
 }
}
Console.WriteLine("memcached緩存數據查詢完成。耗時:{0}", time.ElapsedTicks);

SPool.Shutdown();

【實例代碼】

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved