MemCached配置与缓存知识概述
先看看百度百科里面對(duì)緩存的介紹:
緩存(Cache memory)是硬盤控制器上的一塊內(nèi)存芯片,具有極快的存取速度,它是硬盤內(nèi)部存儲(chǔ)和外界接口之間的緩沖器。由于硬盤的內(nèi)部數(shù)據(jù)傳輸速度和外界介面?zhèn)鬏斔俣炔煌?#xff0c;緩存在其中起到一個(gè)緩沖的作用。緩存的大小與速度是直接關(guān)系到硬盤的傳輸速度的重要因素,能夠大幅度地提高硬盤整體性能。當(dāng)硬盤存取零碎數(shù)據(jù)時(shí)需要不斷地在硬盤與內(nèi)存之間交換數(shù)據(jù),有大緩存,則可以將那些零碎數(shù)據(jù)暫存在緩存中,減小系統(tǒng)的負(fù)荷,也提高了數(shù)據(jù)的傳輸速度。
這個(gè)是介紹了電腦的硬盤緩存..當(dāng)然,電腦里面包括很多種緩存,不是本文重點(diǎn).我們主要關(guān)注這段話的幾個(gè)關(guān)鍵點(diǎn):速度,性能,減小系統(tǒng)的負(fù)荷,這就是緩存的優(yōu)點(diǎn).
ASP.NET緩存概述:
通常,應(yīng)用程序可以將那些頻繁訪問(wèn)的數(shù)據(jù),以及那些需要大量處理時(shí)間來(lái)創(chuàng)建的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,從而提高性能。 例如,如果應(yīng)用程序使用復(fù)雜的邏輯來(lái)處理大量數(shù)據(jù),然后再將數(shù)據(jù)作為用戶頻繁訪問(wèn)的報(bào)表返回,避免在用戶每次請(qǐng)求數(shù)據(jù)時(shí)重新創(chuàng)建報(bào)表可以提高效率。 同樣,如果應(yīng)用程序包含一個(gè)處理復(fù)雜數(shù)據(jù)但不需要經(jīng)常更新的頁(yè),則在每次請(qǐng)求時(shí)服務(wù)器都重新創(chuàng)建該頁(yè)會(huì)使工作效率低下。
在這些情況下,為了幫助您提高應(yīng)用程序的性能,ASP.NET 使用兩種基本的緩存機(jī)制來(lái)提供緩存功能。 第一種機(jī)制是應(yīng)用程序緩存,它允許您緩存所生成的數(shù)據(jù),如 DataSet 對(duì)象或自定義報(bào)表業(yè)務(wù)對(duì)象。 第二種機(jī)制是頁(yè)輸出緩存,它保存頁(yè)處理輸出,并在用戶再次請(qǐng)求該頁(yè)時(shí),重用所保存的輸出,而不是再次處理該頁(yè)。(摘自MSDN)
緩存適用范圍:
1.頻繁訪問(wèn)的數(shù)據(jù)
? 原因:提高性能.應(yīng)用程序使用復(fù)雜的邏輯來(lái)處理大量數(shù)據(jù),然后再將數(shù)據(jù)作為用戶頻繁訪問(wèn)的報(bào)表返回,避免在用戶每次請(qǐng)求數(shù)據(jù)時(shí)重新創(chuàng)建報(bào)表可以提高效率。
2.需要大量處理時(shí)間來(lái)創(chuàng)建的數(shù)據(jù)
? 原因:提高性能.如果應(yīng)用程序包含一個(gè)處理復(fù)雜數(shù)據(jù)但不需要經(jīng)常更新的頁(yè),則在每次請(qǐng)求時(shí)服務(wù)器都重新創(chuàng)建該頁(yè)會(huì)使工作效率低下。
ASP.NET緩存應(yīng)用:
ASP.NET中通過(guò)Cache來(lái)管理應(yīng)用程序緩存,也提供了對(duì)頁(yè)面的緩存.
1,頁(yè)面輸出緩存:緩存整個(gè)頁(yè)面,用戶請(qǐng)求時(shí)不通過(guò)頁(yè)面處理的生命周期,直接從內(nèi)存中讀取.主要用于一些不經(jīng)常修改的頁(yè)面,或者需要大量處理編譯的頁(yè)面有用.
2,頁(yè)面部分輸出緩存:緩存部分頁(yè)面,也就是緩存用戶控件(.ascx).
3,應(yīng)用程序緩存:提供一種編程的方式來(lái)實(shí)現(xiàn)緩存,通過(guò)鍵值對(duì)的形式將任意數(shù)據(jù)存放到內(nèi)存中,應(yīng)用程序緩存是易丟失的,使用應(yīng)用程序緩存的模式是,確定在訪問(wèn)某一項(xiàng)時(shí)該項(xiàng)是否存在于緩存中,如果存在,則使用。如果該項(xiàng)不存在,則可以重新創(chuàng)建該項(xiàng),然后將其放回緩存中。這一模式可確保緩存中始終有最新的數(shù)據(jù)。
4,緩存依賴:Net 2.0引入的自定義緩存依賴項(xiàng),特別是基于MS-SQL Server的SqlCacheDependency特性,使得我們可以避免“數(shù)據(jù)過(guò)期”的問(wèn)題,它能夠根據(jù)數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)的變化,通知緩存,并移除那些過(guò)期的數(shù)據(jù),可以參考我的一篇博文配置緩存依賴ASP.NET 下SQLServer2005 緩存依賴
緩存有它的優(yōu)勢(shì)和劣勢(shì),在使用時(shí)候應(yīng)該視情況而用,在項(xiàng)目前期應(yīng)預(yù)留緩存接口,在項(xiàng)目后期應(yīng)該做性能優(yōu)化加上緩存.
?
下面進(jìn)入本文主題Memcached
對(duì)于一個(gè)新的應(yīng)用我們開發(fā)者主要關(guān)心,它是什么,它能做什么,它有什么優(yōu)勢(shì)和劣勢(shì).怎么用..
Memcached是什么
Memcached是高性能的,分布式的內(nèi)存對(duì)象緩存系統(tǒng),用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫(kù)負(fù)載,提升訪問(wèn)速度。
Memcached能做什么
通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,Memcached能夠用來(lái)存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。
Memcached的優(yōu)勢(shì)和劣勢(shì)
Memcache非常快,Memcached使用了libevent(如果可以的話,在linux下使用epoll)來(lái)均衡任何數(shù)量的打開鏈接,使用非阻塞的網(wǎng)絡(luò)I/O,對(duì)內(nèi)部對(duì)象實(shí)現(xiàn)引用計(jì)數(shù)(因此,針對(duì)多樣的客戶端,對(duì)象可以處在多樣的狀態(tài)), 使用自己的頁(yè)塊分配器和哈希表, 因此虛擬內(nèi)存不會(huì)產(chǎn)生碎片并且虛擬內(nèi)存分配的時(shí)間復(fù)雜度可以保證為O(1).。
Memcached的緩存是一種分布式的,可以讓不同主機(jī)上的多個(gè)用戶同時(shí)訪問(wèn), 因此解決了共享內(nèi)存只能單機(jī)應(yīng)用的局限,更不會(huì)出現(xiàn)使用數(shù)據(jù)庫(kù)做類似事情的時(shí)候,磁盤開銷和阻塞的發(fā)生。當(dāng)然Memcached也可以用在本地,但是相對(duì)于asp.net Cache那太不劃算了.
現(xiàn)在比較常用的Mysql數(shù)據(jù)庫(kù),mysql默認(rèn)開啟了查詢緩存,當(dāng)數(shù)據(jù)表更新時(shí),查詢緩存會(huì)被更新,如果頻繁的發(fā)生這種更新會(huì)導(dǎo)致查詢緩存效率非常低下.如果mysql數(shù)據(jù)庫(kù)量不大,可以使用mysql查詢緩存,否則Memcached更合適.
還有一種共享內(nèi)存方式,多個(gè)進(jìn)程或者線程共享同一個(gè)緩存.雖然效率提高了不少,但是畢竟只能局限在一臺(tái)機(jī)子上.
因?yàn)镸emcached也是內(nèi)存管理,所以也易丟失,理論Memcached可以達(dá)到并發(fā)的最大連接數(shù)是是200,這個(gè)數(shù)值應(yīng)該可以調(diào)整,也取決于機(jī)器的配置.因?yàn)镸emcached是分布式的,所以它的最大瓶頸在于網(wǎng)絡(luò)連接.
Memcached怎么使用
1,windows下安裝Memcached
Memcached當(dāng)前版本是1.2.6?下載地址
服務(wù)的啟動(dòng):
1, 將memcached-1.2.1-win32.zip解決到指定的地方,如e:\memcached
2 命令行輸入 'e:\memcached\memcached.exe -d install'?
3 命令行輸入 'E:\memcached\memcached.exe -d start' ,該命令啟動(dòng) Memcached,默認(rèn)監(jiān)聽端口為 11211
2,Ubuntu 下安裝Memcached
啟動(dòng)終端,在終端下輸入
sudo apt-get install memcached
現(xiàn)在安裝成功后啟動(dòng)服務(wù),
memcached -d -u root
具體的命令請(qǐng)參考下面的說(shuō)明
常用設(shè)置:-p <num>????????? 監(jiān)聽的端口
-l <ip_addr>????? 連接的IP地址, 默認(rèn)是本機(jī)
-d start????????? 啟動(dòng)memcached服務(wù)
-d restart??????? 重起memcached服務(wù)
-d stop|shutdown? 關(guān)閉正在運(yùn)行的memcached服務(wù)
-d install??????? 安裝memcached服務(wù)
-d uninstall????? 卸載memcached服務(wù)
-u <username>???? 以<username>的身份運(yùn)行 (僅在以root運(yùn)行的時(shí)候有效)
-m <num>????????? 最大內(nèi)存使用,單位MB。默認(rèn)64MB
-M??????????????? 內(nèi)存耗盡時(shí)返回錯(cuò)誤,而不是刪除項(xiàng)
-c <num>????????? 最大同時(shí)連接數(shù),默認(rèn)是1024
-f <factor>?????? 塊大小增長(zhǎng)因子,默認(rèn)是1.25
-n <bytes>??????? 最小分配空間,key+value+flags默認(rèn)是48
-h??????????????? 顯示幫助
.NET客戶端工具有好多種,我用的是http://sourceforge.net/projects/memcacheddotnet/
運(yùn)行以下代碼測(cè)試一下.
static void Main(string[] args){
string[] serverlist = { "192.168.0.129:11211" };
//初始化池
SockIOPool sock = SockIOPool.GetInstance();
sock.SetServers(serverlist);
sock.InitConnections = 3;
sock.MinConnections = 3;
sock.MaxConnections = 5;
sock.SocketConnectTimeout = 1000;
sock.SocketTimeout = 3000;
sock.MaintenanceSleep = 30;
sock.Failover = true;
sock.Nagle = false;
sock.Initialize();
//獲取客戶端實(shí)例
MemcachedClient memcached = new MemcachedClient();
memcached.EnableCompression = false;
Console.WriteLine("-------Memcached測(cè)試-------");
memcached.Set("key1", "Value1");
if (memcached.KeyExists("key1"))
{
Console.WriteLine("存在key1..");
Console.WriteLine(memcached.Get("key1").ToString());
}
else
{
Console.WriteLine("不存在key1鍵");
}
Console.Read();
SockIOPool.GetInstance().Shutdown(); //關(guān)閉池, 關(guān)閉sockets
}
我在虛擬機(jī)里面裝的Ubuntu,IP是192.168.0.192.運(yùn)行成功以后代碼之后說(shuō)明Memcached配置成功.
后續(xù)再詳細(xì)介紹.net下操作Memcached…
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的MemCached配置与缓存知识概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 劳斯莱斯最贵多少钱 揭秘劳斯莱斯的顶级豪
- 下一篇: Memcached通用类(基于enyim