C#中緩存的基本用法總結(jié)
本文初步探討了C#緩存的原理及應(yīng)用,并以實(shí)例加以分析總結(jié),這些對(duì)C#初學(xué)者來(lái)說(shuō)是很有必要熟練掌握的內(nèi)容。具體如下:
一、概述:
緩存應(yīng)用目的:緩存主要是為了提高數(shù)據(jù)的讀取速度。因?yàn)榉?wù)器和應(yīng)用客戶(hù)端之間存在著流量的瓶頸,所以讀取大容量數(shù)據(jù)時(shí),使用緩存來(lái)直接為客戶(hù)端服務(wù),可以減少客戶(hù)端與服務(wù)器端的數(shù)據(jù)交互,從而大大提高程序的性能。
1、緩存的引用空間:System.Web.Caching; 緩存命名空間主要提供三種操作:緩存數(shù)據(jù)對(duì)象、對(duì)象的緩存依賴(lài)和數(shù)據(jù)庫(kù)的緩存依賴(lài)。其中緩存任何對(duì)象都使用一個(gè)類(lèi)Cache,但當(dāng)緩存發(fā)生改變時(shí),普通對(duì)象和數(shù)據(jù)庫(kù)對(duì)象的依賴(lài)處理不同。
2、管理緩存類(lèi):Cache
Cache類(lèi)用來(lái)存儲(chǔ)數(shù)據(jù)對(duì)象,并提供方法對(duì)這些對(duì)象進(jìn)行編輯。Cache類(lèi)屬于字典類(lèi),其根據(jù)一定的規(guī)則存儲(chǔ)用戶(hù)需要的數(shù)據(jù),這些數(shù)據(jù)的類(lèi)型不受限制,可以是字符串、數(shù)組、數(shù)據(jù)表、Dataset和哈希表等。
使用Cache類(lèi)的優(yōu)點(diǎn)是當(dāng)緩存的數(shù)據(jù)發(fā)生變化時(shí),Cache類(lèi)會(huì)讓數(shù)據(jù)失效,并實(shí)現(xiàn)緩存數(shù)據(jù)的重新添加,然后通知應(yīng)用程序,報(bào)告緩存的及時(shí)更新。
二、方法詳解:
Cache類(lèi)的方法主要提供對(duì)緩存數(shù)據(jù)的編輯操作,如增、刪、改等。
Add 將數(shù)據(jù)添加到Cache對(duì)象
Insert 向Cache中插入數(shù)據(jù)項(xiàng),可用于修改已經(jīng)存在的數(shù)據(jù)緩存項(xiàng)
Remove 移除Cache對(duì)象中的緩存數(shù)據(jù)項(xiàng)
Get 從Cache對(duì)象中獲取指定的數(shù)據(jù)項(xiàng),注意返回的是Object類(lèi)型,需要進(jìn)行類(lèi)型轉(zhuǎn)換
GetType 從Cache對(duì)象中獲取數(shù)據(jù)項(xiàng)的類(lèi)型,判斷數(shù)據(jù)類(lèi)型后,方便進(jìn)行轉(zhuǎn)換
最需要注意的是Add方法,其使用語(yǔ)法如下:
public Object Add ( string key, Object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback )
在使用Add方法時(shí),以上7個(gè)參數(shù)是必需的,其代表意義如下:
— 參數(shù)“key”代表緩存數(shù)據(jù)項(xiàng)的鍵值,必須是唯一的。
— 參數(shù)“value”代表緩存數(shù)據(jù)的內(nèi)容,可以是任意類(lèi)型。
— 參數(shù)“dependencies”表示緩存的依賴(lài)項(xiàng),也就是此項(xiàng)的更改意味著緩存內(nèi)容已經(jīng)過(guò)期。如果沒(méi)有依賴(lài)項(xiàng),可將此值設(shè)置為NULL。
— 參數(shù)“absoluteExpiration”是日期型數(shù)據(jù),表示緩存過(guò)期的時(shí)間,.NET 2.0提供的緩存在過(guò)期后是可以使用的,能使用多長(zhǎng)時(shí)間,就看這個(gè)參數(shù)的設(shè)置。
— 參數(shù)“slidingExpiration”的類(lèi)型表示一段時(shí)間間隔,表示緩存參數(shù)將在多長(zhǎng)時(shí)間以后被刪除,此參數(shù)與absoluteExpiration參數(shù)相關(guān)聯(lián)。
— 參數(shù)“priority”表示撤銷(xiāo)緩存的優(yōu)先值,此參數(shù)的值取自枚舉變量“CacheItemPriority”,優(yōu)先級(jí)低的數(shù)據(jù)項(xiàng)將先被刪除。此參數(shù)主要用在緩存退出對(duì)象時(shí)。
— 參數(shù)“onRemoveCallback”表示緩存刪除數(shù)據(jù)對(duì)象時(shí)調(diào)用的事件,一般用做通知程序。
應(yīng)用代碼如下:
ArrayList myarray = new ArrayList(); myarray.Add("1.學(xué)習(xí)天地1"); myarray.Add("2.學(xué)習(xí)天地1"); myarray.Add("3.學(xué)習(xí)天地1"); myarray.Add("4.學(xué)習(xí)天地1"); string item = "這是一條緩存"; Cache["item"] = item;//賦值 Response.Write(Cache.Get("item") + "<br/>"); item = "更改一條緩存數(shù)據(jù)"; Cache.Insert("item", item);//更改緩存值 Response.Write(Cache.Get("item") + "<br/>"); //Cache.Remove("item"); //移除緩存值 //Response.Write(Cache.Get("item") + "<br/>"); Response.Write(Cache["item"].GetType().Name + "<br/>");//GetType獲得Cache的數(shù)據(jù)類(lèi)型 Response.Write(Cache.Get("Array") + "<br/>");//GetType獲得Cache的數(shù)據(jù)類(lèi)型 IDictionaryEnumerator bianli = Cache.GetEnumerator();//遍歷整個(gè)緩存 while (bianli.MoveNext()) { Response.Write(bianli.Value + "<br/>"); } Response.Write("獲取緩存數(shù)量:" + Cache.Count); if (Cache["Array"] == null) {//當(dāng)緩存Array不存在時(shí),添加緩存,緩存時(shí)間設(shè)定為5秒 Cache.Add("Array", myarray, null, DateTime.Now.AddSeconds(5), TimeSpan.Zero, CacheItemPriority.Normal, null); }
3、 緩存依賴(lài)類(lèi):CacheDependency類(lèi)
功能說(shuō)明:
CacheDependency類(lèi)被稱(chēng)為是緩存依賴(lài)類(lèi),其具體意義表現(xiàn)在當(dāng)緩存對(duì)象的實(shí)際數(shù)據(jù)發(fā)生改變時(shí),它能及時(shí)通知緩存對(duì)象。例如緩存對(duì)象“Category”保存的是一個(gè)XML文件的數(shù)據(jù),如果XML文件發(fā)生了變化,那么系統(tǒng)通過(guò)CacheDependency類(lèi)就會(huì)及時(shí)更新緩存對(duì)象“Category”的內(nèi)容,這樣就能保證用戶(hù)讀取的永遠(yuǎn)是最新的數(shù)據(jù)。
代碼實(shí)例:
CaCheXml.xml文件如下:
<?xml version="1.0" encoding="utf-8" ?> <book> <bookinfo> <name>英國(guó)古代</name> <price>28.00</price> </bookinfo> <bookinfo> <name>中國(guó)歷史</name> <price>20.00</price> </bookinfo> <bookinfo> <name>中國(guó)歷史1232sdf2</name> <price>20.00</price> </bookinfo> </book>
后臺(tái)代碼如下:
private static CacheDependency Mydata; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("Cachexml.xml"));//讀取Xml里面數(shù)據(jù) if (Cache["CXml"] == null) { //創(chuàng)建緩存依賴(lài)項(xiàng) Mydata = new CacheDependency(Server.MapPath("Cachexml.xml")); Cache.Add("CXml", ds, Mydata, DateTime.Now.AddSeconds(10), TimeSpan.Zero, CacheItemPriority.Normal, null); } } } protected void Button1_Click(object sender, EventArgs e) { if (Mydata.HasChanged) {//判斷緩存是否更改 Response.Write("緩存已經(jīng)更改,更改時(shí)間為"+Mydata.UtcLastModified);//獲取緩存的跟新時(shí)間 } if (Cache["CXml"] == null) {//當(dāng)xml文件被改動(dòng)時(shí)緩存從新加載 DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("Cachexml.xml"));//讀取Xml里面數(shù)據(jù) //創(chuàng)建緩存依賴(lài)項(xiàng) Mydata = new CacheDependency(Server.MapPath("Cachexml.xml")); Cache.Add("CXml", ds, Mydata, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null); } this.GridView1.DataSource = Cache["CXml"]; this.GridView1.DataBind(); }
相關(guān)文章
WPF 自定義雷達(dá)圖開(kāi)發(fā)實(shí)例教程
這篇文章主要介紹了WPF 自定義雷達(dá)圖開(kāi)發(fā)實(shí)例教程,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09C# Winform 分頁(yè)功能的實(shí)現(xiàn)
本文主要介紹了C# Winform 分頁(yè)功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06c#中winform根據(jù)郵箱地址和密碼一鍵發(fā)送email的實(shí)現(xiàn)
本文主要介紹了c#winform根據(jù)郵箱地址和密碼一鍵發(fā)送email的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07c#中WinForm用OpencvSharp實(shí)現(xiàn)ROI區(qū)域提取的示例
已經(jīng)自學(xué)OpencvSharp一段時(shí)間了,現(xiàn)在就分享一下我的學(xué)習(xí)過(guò)程,本文主要介紹了c#中WinForm用OpencvSharp實(shí)現(xiàn)ROI區(qū)域提取的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2022-05-05C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn)
這篇文章主要介紹了C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01基于C#實(shí)現(xiàn)簡(jiǎn)單離線注冊(cè)碼生成與驗(yàn)證
本文使用RSA非對(duì)稱(chēng)加密和Base64簡(jiǎn)單地實(shí)現(xiàn)離線注冊(cè)碼的生成與驗(yàn)證功能。感興趣的朋友跟著小編一起學(xué)習(xí)吧2015-09-09C#在Winform開(kāi)發(fā)中使用Grid++報(bào)表
這篇文章主要介紹了C#在Winform開(kāi)發(fā)中使用Grid++報(bào)表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03C#制作鷹眼的詳細(xì)全過(guò)程(帶注釋)實(shí)例代碼
C#制作鷹眼的詳細(xì)全過(guò)程(帶注釋)實(shí)例代碼,需要的朋友可以參考一下2013-03-03