ASP.NET 缓存 Cache
ASP.NET 提供一個功能完整的緩存引擎,頁面可使用該引擎通過 HTTP 請求存儲和檢索任意對象.
緩存的生存期與應用程序的生存期相同,也就是說,當應用程序重新啟動時,將重新創(chuàng)建緩存。
將數(shù)據添加到緩存中
1。通過指定其鍵和值將項添加到緩存中
Cache["txt"] = "a";
2.通過使用 Insert(重載Insert方法)方法將項添加到緩存中
Cache.Insert("txt", "a");
下列代碼顯示如何設置相對過期策略。它插入一個項,該項自上次訪問后 10 分鐘過期。注意 DateTime.MaxValue 的使用,它表示此項沒有絕對過期策略。
DateTime absoluteExpiration=DateTime.MaxValue;
TimeSpan slidingExpiration=TimeSpan.FromMinutes(10);
Cache.Insert("txt", "a",null,
absoluteExpiration,slidingExpiration,
System.Web.Caching.CacheItemPriority.High,null);
3.使用 Add 方法將項添加到緩存中
Add 方法與 Insert 方法具有相同的簽名,但它返回表示您所添加項的對象
DateTime absoluteExpiration=DateTime.MaxValue;
TimeSpan slidingExpiration=TimeSpan.FromMinutes(10);
Object? Ojb=(string)Cache.Add("txt","a",null,
absoluteExpiration ,slidingExpiration ,
System.Web.Caching.CacheItemPriority.High,null);
string str=(string)Ojb ;
Response.Write(str);
結果顯示是"a"
Add 方法使用上沒有Insert 方法靈活,使用Add 方法時必須提供7個參數(shù),Insert 方法重載4次,我們可以根據需要選擇適當重載方法
從緩存中取得數(shù)據
方式1:
string str=(string)Cache.Get("txt");
Response.Write(str);
方式2:
string str1=(string)Cache["txt1"];
Response.Write(str1);
查看Cache中所有數(shù)據
System.Text.StringBuilder sb=new System.Text.StringBuilder("",100);
foreach(DictionaryEntry Caches? in Cache)
{
sb.Append("key=").Append(Caches.Key.ToString()).Append("
") ;
sb.Append("value=").Append(Caches.Value.ToString()).Append("
");
}
Response.Write(sb.ToString());
查看Cache中的項數(shù)
int Count=Cache.Count;
Response.Write(Count.ToString());
將數(shù)據從緩存中刪除
Cache.Remove("txt");
使Cache具有文件依賴項或鍵依賴項的對象
我們在一頁面建立1個按鈕,查看CACHE是否存在
在窗體啟動時我們創(chuàng)建CACHE,名稱="txt2",數(shù)值=數(shù)據集ds
該CACHE與myfile.xml相關聯(lián),當myfile.xml文件變化時,txt2CACHE就被自動刪除
private void Page_Load(object sender, System.EventArgs e)
{
if( !IsPostBack? )
{
string FilePath=MapPath("myfile.xml");
SqlConnection con=new SqlConnection("Uid=sa;database=pubs;");
SqlDataAdapter da =new SqlDataAdapter("select * from authors",con);
DataSet ds=new DataSet();
da.Fill(ds);
System.Web.Caching.CacheDependency CacheDependencyXmlFile=new System.Web.Caching.CacheDependency(FilePath);
Cache.Insert("txt2",ds ,CacheDependencyXmlFile);
}
}
為了監(jiān)視pubs數(shù)據庫authors表的變化
我們可以在pubs數(shù)據庫authors表建立觸發(fā)器
一旦authors表中發(fā)生增加,刪除,修改數(shù)據時,觸發(fā)器會自動修改文件myfile.xml
一旦myfile.xml文件變化,txt2CACHE就被系統(tǒng)自動刪除
CREATE TRIGGER tr_authors
ON authors
FOR INSERT, UPDATE ,delete
AS
declare @cmd nvarchar(4000)
select @cmd='bcp "select convert(nvarchar(30),Getdate(),13)" queryout D:\cache\WebCache\myfile.xml -c -Sglc2403 -Usa -P'
exec master..xp_cmdshell @cmd
GO
private void QueryButton_Click(object sender, System.EventArgs e)
{
if ( Cache["txt2"]!=null)
{
Response.Write("exists");
}
else
{
Response.Write("not exists");
}
}
首先我們點按鈕,顯示Cache["txt2"]存在
現(xiàn)在我們去表authors中任意修改一數(shù)據,再點按鈕,顯示Cache["txt2"]不存在拉
以上我們是把CACHE是和一個文件相關聯(lián),我們還可以把CACHE和文件組關聯(lián),建立依賴
以下我們把CACHE和2個文件(myfile.xml,myfile1.xml)關聯(lián),一旦文件組中其中任意一文件變化,Cache會把"txt2"項的數(shù)據從CACHE中刪除
string[] FilePath=new String[]{MapPath("myfile.xml"),MapPath("myfile1.xml")};
System.Web.Caching.CacheDependency CacheDependencyXmlFile=new???????????????????? System.Web.Caching.CacheDependency(FilePath);
string CacheVaule="a";
Cache.Insert("txt2", CacheVaule ,CacheDependencyXmlFile);
?
緩存依賴可以是文件,還可以是其他對象的鍵
下面的代碼說明緩存Cache["txt2"]既依賴文件myfile.xml,又依賴緩存中的Cache["txt"],只要這2者任意一樣改變,緩存Cache["txt2"]就會清除
Cache["txt"] = "b";
string[] FilePath=new String[]{ MapPath("myfile.xml")};
string[] dependencyKey=new String[]{"txt"};
SqlConnection con=new SqlConnection("Uid=sa;database=pubs;");
SqlDataAdapter da =new SqlDataAdapter("select * from authors",con);
DataSet ds=new DataSet();
da.Fill(ds);
System.Web.Caching.CacheDependency CacheDependencyXmlFile=
new System.Web.Caching.CacheDependency(FilePath,dependencyKey);
Cache.Insert("txt2",ds ,CacheDependencyXmlFile);
緩存絕對過期
緩存Cache["txt3"] 在1小時后自動過期
DateTime absoluteExpiration =DateTime.Now.AddHours(1);
Cache.Insert("txt3","aa",null,absoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration);
緩存相對(滑動)過期
注意:如果創(chuàng)建的彈性到期時間小于零或大于一年,則將引發(fā)異常
緩存Cache["txt4"] 在最后一次被訪問后1小時自動過期
TimeSpan slidingExpiration=TimeSpan.FromHours(1);
Cache.Insert("txt4","4",null,System.Web.Caching.Cache.NoAbsoluteExpiration,slidingExpiration);
緩存項的優(yōu)先等級
當承載 ASP.NET 應用程序的 Web 服務器缺少內存時,Cache 將有選擇地清除項來釋放系統(tǒng)內存。當向緩存添加項時,可以為其分配與緩存中存儲的其他項相比較的相對優(yōu)先級。在服務器處理大量請求時,分配了較高優(yōu)先級值 的項被從緩存刪除的可能性較小,而分配了較低優(yōu)先級值的項則更有可能被刪除。
由CacheItemPriority 枚舉表示,默認為 Normal。
緩存Cache["txt5"]優(yōu)先等級設為最高等級,在服務器釋放系統(tǒng)內存時,該緩存項最不可能被刪除。
Cache.Insert("txt5","5",null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.High,null);
緩存項時通知應用程序的回調方法
ASP.NET 提供 CacheItemRemovedCallback 委托。它定義編寫事件處理程序時使用的簽名,當從緩存中刪除項時,該事件處理程序將進行響應。
static System.Web.Caching.CacheItemRemovedReason reason;
System.Web.Caching.CacheItemRemovedCallback onRemove = null;
public void RemovedCallback(String k, Object v, System.Web.Caching.CacheItemRemovedReason r)
{
itemRemoved = true;
reason = r;
}
onRemove = new System.Web.Caching.CacheItemRemovedCallback (this.RemovedCallback);
Cache.Insert("txt",ds,null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,onRemove);
?
由于任何原因從Cache中移除時,將調用 RemovedCallback 方法。
總結
以上是生活随笔為你收集整理的ASP.NET 缓存 Cache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# Winform 窗体美化(九、嵌入
- 下一篇: 【MATLAB】混合粒子群算法原理、代码