日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MemCached配置与缓存知识概述

發(fā)布時(shí)間:2024/9/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MemCached配置与缓存知识概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先看看百度百科里面對緩存的介紹:

緩存(Cache memory)是硬盤控制器上的一塊內(nèi)存芯片,具有極快的存取速度,它是硬盤內(nèi)部存儲和外界接口之間的緩沖器。由于硬盤的內(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)用程序可以將那些頻繁訪問的數(shù)據(jù),以及那些需要大量處理時(shí)間來創(chuàng)建的數(shù)據(jù)存儲在內(nèi)存中,從而提高性能。 例如,如果應(yīng)用程序使用復(fù)雜的邏輯來處理大量數(shù)據(jù),然后再將數(shù)據(jù)作為用戶頻繁訪問的報(bào)表返回,避免在用戶每次請求數(shù)據(jù)時(shí)重新創(chuàng)建報(bào)表可以提高效率。 同樣,如果應(yīng)用程序包含一個(gè)處理復(fù)雜數(shù)據(jù)但不需要經(jīng)常更新的頁,則在每次請求時(shí)服務(wù)器都重新創(chuàng)建該頁會使工作效率低下。

在這些情況下,為了幫助您提高應(yīng)用程序的性能,ASP.NET 使用兩種基本的緩存機(jī)制來提供緩存功能。 第一種機(jī)制是應(yīng)用程序緩存,它允許您緩存所生成的數(shù)據(jù),如 DataSet 對象或自定義報(bào)表業(yè)務(wù)對象。 第二種機(jī)制是頁輸出緩存,它保存頁處理輸出,并在用戶再次請求該頁時(shí),重用所保存的輸出,而不是再次處理該頁。(摘自MSDN)

緩存適用范圍:

1.頻繁訪問的數(shù)據(jù)
? 原因:提高性能.應(yīng)用程序使用復(fù)雜的邏輯來處理大量數(shù)據(jù),然后再將數(shù)據(jù)作為用戶頻繁訪問的報(bào)表返回,避免在用戶每次請求數(shù)據(jù)時(shí)重新創(chuàng)建報(bào)表可以提高效率。

2.需要大量處理時(shí)間來創(chuàng)建的數(shù)據(jù)
? 原因:提高性能.如果應(yīng)用程序包含一個(gè)處理復(fù)雜數(shù)據(jù)但不需要經(jīng)常更新的頁,則在每次請求時(shí)服務(wù)器都重新創(chuàng)建該頁會使工作效率低下。

ASP.NET緩存應(yīng)用:

ASP.NET中通過Cache來管理應(yīng)用程序緩存,也提供了對頁面的緩存.

1,頁面輸出緩存:緩存整個(gè)頁面,用戶請求時(shí)不通過頁面處理的生命周期,直接從內(nèi)存中讀取.主要用于一些不經(jīng)常修改的頁面,或者需要大量處理編譯的頁面有用.

2,頁面部分輸出緩存:緩存部分頁面,也就是緩存用戶控件(.ascx).

3,應(yīng)用程序緩存:提供一種編程的方式來實(shí)現(xiàn)緩存,通過鍵值對的形式將任意數(shù)據(jù)存放到內(nèi)存中,應(yīng)用程序緩存是易丟失的,使用應(yīng)用程序緩存的模式是,確定在訪問某一項(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ù)過期”的問題,它能夠根據(jù)數(shù)據(jù)庫中相應(yīng)數(shù)據(jù)的變化,通知緩存,并移除那些過期的數(shù)據(jù),可以參考我的一篇博文配置緩存依賴ASP.NET 下SQLServer2005 緩存依賴

緩存有它的優(yōu)勢和劣勢,在使用時(shí)候應(yīng)該視情況而用,在項(xiàng)目前期應(yīng)預(yù)留緩存接口,在項(xiàng)目后期應(yīng)該做性能優(yōu)化加上緩存.

?

下面進(jìn)入本文主題Memcached

對于一個(gè)新的應(yīng)用我們開發(fā)者主要關(guān)心,它是什么,它能做什么,它有什么優(yōu)勢和劣勢.怎么用..

Memcached是什么

Memcached是高性能的,分布式的內(nèi)存對象緩存系統(tǒng),用于在動態(tài)應(yīng)用中減少數(shù)據(jù)庫負(fù)載,提升訪問速度。

Memcached能做什么

通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,Memcached能夠用來存儲各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等。

Memcached的優(yōu)勢和劣勢

Memcache非常快,Memcached使用了libevent(如果可以的話,在linux下使用epoll)來均衡任何數(shù)量的打開鏈接,使用非阻塞的網(wǎng)絡(luò)I/O,對內(nèi)部對象實(shí)現(xiàn)引用計(jì)數(shù)(因此,針對多樣的客戶端,對象可以處在多樣的狀態(tài)), 使用自己的頁塊分配器和哈希表, 因此虛擬內(nèi)存不會產(chǎn)生碎片并且虛擬內(nèi)存分配的時(shí)間復(fù)雜度可以保證為O(1).。

Memcached的緩存是一種分布式的,可以讓不同主機(jī)上的多個(gè)用戶同時(shí)訪問, 因此解決了共享內(nèi)存只能單機(jī)應(yīng)用的局限,更不會出現(xiàn)使用數(shù)據(jù)庫做類似事情的時(shí)候,磁盤開銷和阻塞的發(fā)生。當(dāng)然Memcached也可以用在本地,但是相對于asp.net Cache那太不劃算了.

現(xiàn)在比較常用的Mysql數(shù)據(jù)庫,mysql默認(rèn)開啟了查詢緩存,當(dāng)數(shù)據(jù)表更新時(shí),查詢緩存會被更新,如果頻繁的發(fā)生這種更新會導(dǎo)致查詢緩存效率非常低下.如果mysql數(shù)據(jù)庫量不大,可以使用mysql查詢緩存,否則Memcached更合適.

還有一種共享內(nèi)存方式,多個(gè)進(jìn)程或者線程共享同一個(gè)緩存.雖然效率提高了不少,但是畢竟只能局限在一臺機(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ù)的啟動:

1, 將memcached-1.2.1-win32.zip解決到指定的地方,如e:\memcached

2 命令行輸入 'e:\memcached\memcached.exe -d install'?
3 命令行輸入 'E:\memcached\memcached.exe -d start' ,該命令啟動 Memcached,默認(rèn)監(jiān)聽端口為 11211

2,Ubuntu 下安裝Memcached

啟動終端,在終端下輸入

sudo apt-get install memcached

現(xiàn)在安裝成功后啟動服務(wù),

memcached -d -u root

具體的命令請參考下面的說明

常用設(shè)置:-p <num>????????? 監(jiān)聽的端口
-l <ip_addr>????? 連接的IP地址, 默認(rèn)是本機(jī)
-d start????????? 啟動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>?????? 塊大小增長因子,默認(rèn)是1.25
-n <bytes>??????? 最小分配空間,key+value+flags默認(rèn)是48
-h??????????????? 顯示幫助

.NET客戶端工具有好多種,我用的是http://sourceforge.net/projects/memcacheddotnet/

運(yùn)行以下代碼測試一下.

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測試-------");
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)行成功以后代碼之后說明Memcached配置成功.

后續(xù)再詳細(xì)介紹.net下操作Memcached…

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的MemCached配置与缓存知识概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。