1.緩存的添加:
Cache的添加方法有Add()或Insert(),兩種方法幾乎類似,只是Inser方法可以使用可選參數,即使用默認參數,來實現緩存的添加:
Cache.Add(
KeyName,//緩存名
KeyValue,//要緩存的對象
Dependencies,//依賴項
AbsoluteExpiration,//絕對過期時間
SlidingExpiration,//相對過期時間
Priority,//優先級
CacheItemRemovedCallback);//緩存過期引發事件
2. 緩存依賴項:
緩存可以設置的時效性可以通過 文件依賴,其他緩存依賴,數據庫依賴和過期時間方法來設置,當文件改變,依賴緩存項改變,數據庫改變或時間的到期時,緩存會失效,並可以引發一定事件。
2.1 文件依賴:
CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml"));
Cache.Insert("GridViewDataSet", dsGrid, fileDepends);
此例爲通過Northiwind.xml文件依賴出來緩存的用法:
2.2 其他緩存項依賴:
string[] fileDependsArray = {Server.MapPath("Northwind.xml")};
string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};
CacheDependency cacheDepends = new CacheDependency(fileDependsArray, cacheDependsArray);
Cache.Insert("GridViewDataSet", dsGrid, cacheDepends);
此例設置了Northwind.xml文件依賴和 Depend0,depend1,Depend2緩存項
其中Depend0,depend1,Depend2爲另外三個緩存。
如果不需要文件依賴可以設置爲NULL。
2.3 過期時間設定:
AbsoluteExpiration可以設置緩存的絕對過期時間,如:
Cache.Insert("GridViewDataSet ", dsGrid, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration);
緩存會在添加起30分鐘後過期。
NoSlidingExpiration可以設置相對過期時間,如果緩存在NoSlidingExpiration設定的時間內沒有被訪問,緩存過期,如果在這段時間內有訪問,則緩存過期時間將會重置爲原始值,如NoSlidingExpiration=20
在20分鐘內如果沒有被訪問,緩存過期,如果每次19分鐘訪問緩存,緩存將永遠不會過期。
Cache.Insert("DataGridDataSet", dsGrid, null,Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30));
3. 優先級:
Priority屬性值和意義:
Priority value |
Description |
NotRemovable |
Items with this priority will not be evicted. |
High |
Items with this priority level are the least likely to be evicted. |
AboveNormal |
Items with this priority level are less likely to be evicted than items assigned Normal priority. |
Default |
This is equivalent to Normal. |
Normal |
The default value. |
BelowNormal |
Items with this priority level are more likely to be evicted than items assigned Normal priority. |
Low |
Items with this priority level are the most likely to be evicted. |
4. 緩存失效事件處理:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Caching; // necessary for CacheDependency
using System.Xml; // necessary for Xml stuff
public partial class _Default : System.Web.UI.Page
{
public static CacheItemRemovedCallback onRemove = null;
protected void Page_Load(object sender, EventArgs e)
{
CreateGridView( );
}
private void CreateGridView( )
{
DataSet dsGrid;
dsGrid = (DataSet)Cache["GridViewDataSet"];
onRemove = new CacheItemRemovedCallback(this.RemovedCallback);
if (dsGrid == null)
{
dsGrid = GetDataSet( );
string[] fileDependsArray = {Server.MapPath("Northwind.xml")};
string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};
CacheDependency cacheDepends = new CacheDependency
(fileDependsArray, cacheDependsArray);
Cache.Insert("GridViewDataSet", dsGrid, cacheDepends,
DateTime.Now.AddSeconds(10),
Cache.NoSlidingExpiration,
CacheItemPriority.Default,
onRemove);
lblMessage.Text = "Data from XML file.";
}
else
{
lblMessage.Text = "Data from cache.";
}
gv.DataSource = dsGrid.Tables[0];
gv.DataBind( );
}
private DataSet GetDataSet( )
{
DataSet dsData = new DataSet( );
XmlDataDocument doc = new XmlDataDocument( );
doc.DataSet.ReadXml(Server.MapPath("Northwind.xml"));
dsData = doc.DataSet;
return dsData;
}
public void RemovedCallback(string cacheKey,
Object cacheObject,
CacheItemRemovedReason reasonToRemove)
{
WriteFile("Cache removed for following reason: " +
reasonToRemove.ToString( ));
}
private void WriteFile(string strText)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(
@"C:"test.txt", true);
string str;
str = DateTime.Now.ToString( ) + " " + strText;
writer.WriteLine(str);
writer.Close( );
}
protected void btnClear_Click(object sender, EventArgs e)
{
Cache.Remove("GridViewDataSet");
CreateGridView( );
}
protected void btnInit_Click(object sender, EventArgs e)
{
// Initialize caches to depend on.
Cache["Depend0"] = "This is the first dependency.";
Cache["Depend1"] = "This is the 2nd dependency.";
Cache["Depend2"] = "This is the 3rd dependency.";
}
protected void btnKey0_Click(object sender, EventArgs e)
{
Cache["Depend0"] = "This is a changed first dependency.";
}
}
Table 17-5. Members of the CacheItemRemovedReason enumeration |
|
Reason |
Description |
DependencyChanged |
A file or item key dependency has changed. |
Expired |
The cached item has expired. |
Removed |
The cached item has been explicitly removed by the Remove method or replaced by another item with the same key. |
Underused |
The cached item was removed to free up system memory. |