asp.net 使用駐留在頁(yè)面中的Cache緩存常用可定時(shí)更新的數(shù)據(jù)
就是希望讓W(xué)eb應(yīng)用程序從一開(kāi)始運(yùn)行到結(jié)束都一直存在,有人就說(shuō)為什么不用Application呢?其實(shí)Cache是可以一段時(shí)間內(nèi)自動(dòng)更新數(shù)據(jù)的,而Application就無(wú)法做成這樣的,另外Application在Web這種高并發(fā)的系統(tǒng)中一定要考慮線程安全的問(wèn)題,Application本身就不是線程安全的,而Cache就是線程安全。所以一般我都會(huì)在很多對(duì)象中我只從Web開(kāi)始運(yùn)行的時(shí)候從數(shù)據(jù)庫(kù)或文件里獲取一次數(shù)據(jù),在不同的頁(yè)面中,都是使用Cache的,而且Cache中的數(shù)據(jù)可能弄成自動(dòng)更新的,所以一般情況不需要考慮數(shù)據(jù)更新的問(wèn)題,另外Cache也是也應(yīng)用程序關(guān)聯(lián)的,全部可能駐留在該Web應(yīng)用程序中的任何頁(yè)面。
當(dāng)然首先我們應(yīng)該熟悉一下System.Web.Caching.Cache這個(gè)類,我這里也就只說(shuō)說(shuō)其中使用比較多的幾個(gè)方法和屬性,如果需要更詳細(xì)的介紹請(qǐng)查閱MSDN。
首先介紹它的Add()方法,將指定的對(duì)象添加到Cache對(duì)象集合中。
Insert()方法將覆蓋有相同Key的Cache頂。
Remove()從應(yīng)用程序的Cache對(duì)象中移除指定項(xiàng)。
Count屬性,獲取存儲(chǔ)在緩存中對(duì)象數(shù)。
這里我主要要說(shuō)的是Add()方法,因?yàn)槲覀內(nèi)绻胍L(zhǎng)期存在Cache并且在一段時(shí)間內(nèi)自動(dòng)替換Cache,就必須非常了解它。我們看看MSDN中對(duì)該方法的詳細(xì)介紹吧。呵。
C#
public Object Add(
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback
)
參數(shù)
- key
- 類型:System.String
用于引用該項(xiàng)的緩存鍵。
- value
- 類型:System.Object
要添加到緩存的項(xiàng)。
- dependencies
- 類型:System.Web.Caching.CacheDependency
該項(xiàng)的文件依賴項(xiàng)或緩存鍵依賴項(xiàng)。當(dāng)任何依賴項(xiàng)更改時(shí),該對(duì)象即無(wú)效,并從緩存中移除。如果沒(méi)有依賴項(xiàng),則此參數(shù)包含 nullNothingnullptrnull 引用(在 Visual Basic 中為 Nothing)。
- absoluteExpiration
- 類型:System.DateTime
所添加對(duì)象將到期并被從緩存中移除的時(shí)間。如果使用可調(diào)到期,則 absoluteExpiration 參數(shù)必須為 NoAbsoluteExpiration。
- slidingExpiration
- 類型:System.TimeSpan
最后一次訪問(wèn)所添加對(duì)象時(shí)與該對(duì)象到期時(shí)之間的時(shí)間間隔。如果該值等效于 20 分鐘,則對(duì)象在最后一次被訪問(wèn) 20 分鐘之后將到期并從緩存中移除。如果使用絕對(duì)到期,則 slidingExpiration 參數(shù)必須為 NoSlidingExpiration。
- priority
- 類型:System.Web.Caching.CacheItemPriority
對(duì)象的相對(duì)成本,由 CacheItemPriority 枚舉表示。緩存在退出對(duì)象時(shí)使用該值;具有較低成本的對(duì)象在具有較高成本的對(duì)象之前被從緩存移除。
- onRemoveCallback
- 類型:System.Web.Caching.CacheItemRemovedCallback
在從緩存中移除對(duì)象時(shí)所調(diào)用的委托(如果提供)。當(dāng)從緩存中刪除應(yīng)用程序的對(duì)象時(shí),可使用它來(lái)通知應(yīng)用程序。
返回值
類型:System.Object
備注
如果 Cache 中已保存了具有相同 key 參數(shù)的項(xiàng),則對(duì)此方法的調(diào)用將失敗。若要使用相同的 key 參數(shù)覆蓋現(xiàn)有的 Cache 項(xiàng),請(qǐng)使用 Insert 方法。
無(wú)法同時(shí)設(shè)置 absoluteExpiration 和 slidingExpiration 參數(shù)。如果要讓緩存項(xiàng)在特定時(shí)間到期,可將 absoluteExpiration 參數(shù)設(shè)置為特定時(shí)間,并將 slidingExpiration 參數(shù)設(shè)置為 NoSlidingExpiration。
如果要讓緩存項(xiàng)在最后一次訪問(wèn)該項(xiàng)后的某段時(shí)間之后到期,可將 slidingExpiration 參數(shù)設(shè)置為到期間隔,并將 absoluteExpiration 參數(shù)設(shè)置為 NoAbsoluteExpiration。
此段轉(zhuǎn)載自MSDN
具體的怎樣添加這種緩存了,一般情況我會(huì)在母版頁(yè)中Init事件或Load事件中添加緩存,因?yàn)檫@樣可以保證引用程序從一開(kāi)始執(zhí)行就可以將需要頻繁使用的對(duì)象緩存起來(lái)了。
protected void Page_Load(object sender, EventArgs e)
{
Cache.Add("key", //需要添加到Cache中的鍵
new { value="添加值"}, //對(duì)應(yīng)的值
null, //緩存依賴項(xiàng)。
DateTime.Now.AddMinutes(1),//固定緩存時(shí)間
System.Web.Caching.Cache.NoSlidingExpiration, //可到延時(shí)緩存時(shí)間,
System.Web.Caching.CacheItemPriority.NotRemovable, //緩存中的優(yōu)先級(jí)。
new System.Web.Caching.CacheItemRemovedCallback(OnMoveCacheBack));//移除時(shí)調(diào)用的回調(diào)函數(shù)
}
public void OnMoveCacheBack(string key, object value, System.Web.Caching.CacheItemRemovedReason reason)
{
if (Cache[key] != null)
{
Cache.Remove(key);
}
Cache.Add("key", //需要添加到Cache中的鍵
new { value = "更新值" }, //對(duì)應(yīng)的值
null, //緩存依賴項(xiàng)。
DateTime.Now.AddMinutes(1),//固定緩存時(shí)間
System.Web.Caching.Cache.NoSlidingExpiration, //可到延時(shí)緩存時(shí)間,
System.Web.Caching.CacheItemPriority.NotRemovable, //緩存中的優(yōu)先級(jí)。
new System.Web.Caching.CacheItemRemovedCallback(OnMoveCacheBack));//移除時(shí)調(diào)用的回調(diào)函數(shù)
}
參數(shù)的具體使用上一定要注意三點(diǎn),
第一就是緩存的依賴項(xiàng)一定要指定為null。
第二固定到期緩存時(shí)間不能和可到延時(shí)緩存時(shí)間同時(shí)指定時(shí)間,實(shí)現(xiàn)我說(shuō)的定期更換數(shù)據(jù)的,當(dāng)然就要使用固定到期緩存時(shí)間了。
第三就是該緩存的優(yōu)先級(jí)了,這個(gè)也比較關(guān)鍵,一定要指定為System.Web.Caching.CacheItemPriority.NotRemovable枚舉值,這樣才不會(huì)被自動(dòng)收回,但是一定要注意該緩存的大小。
相關(guān)文章
asp.net導(dǎo)出excel的簡(jiǎn)單方法實(shí)例
這篇文章主要介紹了asp.net導(dǎo)出excel的簡(jiǎn)單方法實(shí)例,需要的朋友可以參考下2014-02-02.NET連接數(shù)據(jù)庫(kù)以及基本的增刪改查操作教程
這篇文章主要給大家介紹了關(guān)于.NET連接數(shù)據(jù)庫(kù)以及基本的增刪改查操作教程的相關(guān)資料,對(duì)于剛?cè)腴T的新手們來(lái)說(shuō)是個(gè)很好的入門教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01.NET Core中創(chuàng)建和使用NuGet包的示例代碼
這篇文章主要介紹了.NET Core中創(chuàng)建和使用NuGet包的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Repeater控件動(dòng)態(tài)變更列(Header,Item和Foot)信息(重構(gòu)cs)
上一篇雖然它算不上是完全動(dòng)態(tài)化,但它已經(jīng)達(dá)到初期想要的效果,現(xiàn)另開(kāi)一篇,不是重新另外寫,而是想重構(gòu)cs的代碼,因?yàn)榍耙黄拇a雖然簡(jiǎn)單,但代碼冗余過(guò)多,感興趣的朋友可以參考下哈2013-03-03asp.net gridview實(shí)現(xiàn)全選,反選與刪除記錄的操作代碼
asp.net gridview實(shí)現(xiàn)全選,反選與刪除記錄的操作代碼,需要的朋友可以參考下。2011-07-07ASP.NET網(wǎng)站的創(chuàng)建與發(fā)布過(guò)程簡(jiǎn)析
這篇文章主要介紹了ASP.NET的創(chuàng)建與發(fā)布過(guò)程,過(guò)程實(shí)現(xiàn)很簡(jiǎn)單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08.Net語(yǔ)言Smobiler開(kāi)發(fā)之如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了.Net語(yǔ)言APP開(kāi)發(fā)平臺(tái),如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)(Smobiler),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09