淺談 ASP.NET 中Cache的應(yīng)用

2010-08-28 10:50:18來源:西部e網(wǎng)作者:

概述
Cache作為ASP.Net應(yīng)用程序狀態(tài)管理之一的方法,管理瞬間狀態(tài)的高速緩存對象,在并發(fā)量大,效率要求較高的Application應(yīng)用較廣。
Cache除了與Application一樣是一個簡單的鍵、值對的HashTable之外,還有其獨特之處:
1. Cache可以基于依賴項的終止
  依賴項可以是其他的Cache關(guān)鍵字、文件或者是時間戳。如果Cache的依賴項發(fā)生改變或終止,該項Cache內(nèi)容就會無效并移除。
2. 鎖定管理
  ASP.net是多線程系統(tǒng),當多個線程同時訪問Cache時,必然應(yīng)用鎖定防止同時更新。這個問題Appliction的解決方法是用Lock()和UnLock()方法來鎖定,當然,Cache不同,其可以自行管理內(nèi)部鎖定,所以更新Cache時,程序員不用做任何操作。
3. CallBack回調(diào)
該功能可以在Cache被刪除時運行代碼。

應(yīng)用
如何把Cache應(yīng)用到我們的實現(xiàn)工作中呢?偶目前正在做一個KMS項目,并發(fā)量很大且對速度效率要求很高,在前臺展現(xiàn)方面可能會出現(xiàn)性能瓶頸。為此,我們考慮應(yīng)用SQL Server 2000生成XML文件,并把XML存入高速緩沖(Cache),前臺展現(xiàn)只從XML文檔獲取數(shù)據(jù),這樣可以減少訪問數(shù)據(jù)庫,同時讀取Cache中的數(shù)據(jù),速度也可以保證。下面是其中一段代碼,僅供參考。
protected void RefreshCache (string key, object item,CacheItemRemovedReason reason) 
    
{  
        
string filename="c:\abc.xml"
        XmlDocument xmldoc
=new XmlDocument(); 
 
        xmldoc.Load(filename); 
 
        CacheXml.Insert( 
                
"CacheName" 
                ,xmldoc 
                ,
new CacheDependency (filename) 
                ,Cache.NoAbsoluteExpiration 
                ,Cache.NoSlidingExpiration 
                ,CacheItemPriority.Default 
                ,
new CacheItemRemovedCallback (RefreshCache)  
                ); 
 
    }

[C#]
public void Insert(
string key,
object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration
);
參數(shù)
key
用于引用該對象的緩存鍵。
value
要插入緩存中的對象。
dependencies
所插入對象的文件依賴項或緩存鍵依賴項。當任何依賴項更改時,該對象即無效,并從緩存中移除。如果沒有依賴項,則此參數(shù)包含空引用(Visual Basic 中為 Nothing)。
absoluteExpiration
所插入對象將過期并被從緩存中移除的時間。
slidingExpiration
最后一次訪問所插入對象時與該對象過期時之間的時間間隔。如果該值等效于 20 分鐘,則對象在最后一次被訪問 20 分鐘之后將過期并被從緩存中移除。

如果 slidingExpiration 參數(shù)設(shè)置為 NoSlidingExpiration,則禁用可調(diào)整過期。如果將 slidingExpiration 參數(shù)設(shè)置為大于 Zero,則 absoluteExpiration 參數(shù)設(shè)置為 Now 加 slidingExpiration 參數(shù)中包含的值。如果在 absoluteExpiration 參數(shù)指定的時間之前從緩存請求該項,該項將再次放入緩存,并且 absoluteExpiration 將再次設(shè)置為 DateTime.Now 加 slidingExpiration 參數(shù)中包含的值。如果在 absoluteExpiration 參數(shù)中的日期以前并未從緩存中請求該項,則從緩存移除該項。
關(guān)鍵詞:ASP.NET