分布式快取系統Memcached簡介與實踐

2021-08-22 12:44:03 字數 2429 閱讀 3749

緣起: 在資料驅動的web開發中,經常要重複從資料庫中取出相同的資料,這種重複極大的增加了資料庫負載。快取是解決這個問題的好辦法。但是asp.net中的雖然已經可以實現對頁面區域性進行快取,但還是不夠靈活。此時memcached或許是你想要的。

memcached是什麼?

memcached是由danga interactive開發的,高效能的,分布式的記憶體物件快取系統,用於在動態應用中減少資料庫負載,提公升訪問速度。

memcached能快取什麼?

memcached快麼?

非常快。memcached使用了libevent(如果可以的話,在linux下使用 epoll)來均衡任何數量的開啟鏈結,使用非阻塞的網路i/o,對內部物件實現引用計數(因此,針對多樣的客戶端,物件可以處在多樣的狀態), 使用自己的頁塊分配器和雜湊表, 因此虛擬記憶體不會產生碎片並且虛擬記憶體分配的時間複雜度可以保證為o(1).。

danga interactive為提公升danga interactive的速度研發了memcached。目前,livejournal.com每天已經在向一百萬使用者提供多達兩千萬次的頁面訪問。而這 些,是由乙個由web伺服器和資料庫伺服器組成的集群完成的。memcached幾乎完全放棄了任何資料都從資料庫讀取的方式,同時,它還縮短了使用者檢視 頁面的速度、更好的資源分配方式,以及memcache失效時對資料庫的訪問速度。

memcached的特點

memcached的快取是一種分布式的,可以讓不同主機上的多個使用者同時訪問, 因此解決了共享記憶體只能單機應用的侷限,更不會出現使用資料庫做類似事情的時候,磁碟開銷和阻塞的發生。

memcached的使用

一 memcached伺服器端的安裝 (此處將其作為系統服務安裝)

1 解壓縮檔案到c:\memcached

2命令列輸入 'c:\memcached\memcached.exe -d install'

3 命令列輸入 'c:\memcached\memcached.exe -d start',該命令啟動 memcached ,預設監聽埠為 11211

通過 memcached.exe -h 可以檢視其幫助

二 .net memcached client library

裡面有.net1.1 和 .net2.0的兩種版本 還有乙個不錯的例子。

三 應用

1 將commons.dll,icsharpcode.sharpziplib.dll,log4net.dll,memcached.clientlibrary.dll 等放到bin目錄

2 引用memcached.clientlibrary.dll

3 **

1namespacememcached.memcachedbench

2;14

15//初始化池

16sockiopoolpool=sockiopool.getinstance();

17pool.setservers(serverlist);

1819pool.initconnections=3;

20pool.minconnections=3;

21pool.maxconnections=5;

2223pool.socketconnecttimeout=1000;

24pool.sockettimeout=3000;

2526pool.maintenancesleep=30;

27pool.failover=true;

2829pool.nagle=false;

30pool.initialize();

3132//獲得客戶端例項

33memcachedclientmc=newmemcachedclient();

34mc.enablecompression=false;

3536console.writeline("------------測試-----------");

37mc.set("test","myvalue");//儲存資料到快取伺服器,這裡將字串"myvalue"快取,key是"test"

3839if(mc.keyexists("test"))//測試快取存在key為test的專案

4044else

4548

49console.readline();

5051mc.delete("test");//移除快取中key為test的專案

5253if(mc.keyexists("test"))

5458else

5962console.readline();

6364sockiopool.getinstance().shutdown();//關閉池,關閉sockets

65}66}

67}4 執行結果

後記: 是個不錯的東西 ,使用起來也很方便,php ,ruby 的專案中用這個的很多,但是.net專案中用的較少(恕俺孤陋寡聞) 。希望有興趣的朋友們 多多交流 。

原文出處:

分布式快取 memcache學習

1.使用分布式快取是為了解決多台機器共享資訊的問題,通過訪問乙個ip和埠來可以訪問不同的iis伺服器 2.memcache基礎原理 在socket伺服器端儲存資料是以鍵值對的形式儲存 記憶體處理的演算法 本質就是乙個大的雜湊表。key最大長度是255個字元,value最大為1mb 記憶體模型 mem...

memcache的分布式快取問題

有關使用memcache做分布式快取的方案,簡單寫下來,僅供參考。memcache是優異的快取解決方案,很多專案都有使用。memcache服務本身並不具備分布式快取的能力,它提供的就是對對的訪問能力,分布式的能力則完全來自於客戶端。現在有不少memcache的客戶端lib採用consistent h...

分布式快取Memcache和Redis

針對於現在計算機的cpu和網路設施,對應用程式來說,執行效率的瓶頸,已經不是 的長度 實現同乙個功能 和頻寬了,而是,訪問資源的過程,即 讓我們的程式慢下來的罪魁禍首就是io操作。程式從硬碟上讀取資料是乙個非常花費時間的操作,因為我們現在所使用的硬碟是機械式的,你想機械的執行速度和電的速度,那是乙個...