ASP.NET Cache是提高系統性能的重要方法,它使用了「最近使用」原則(a least-recently-used algorithm)。在數據庫訪問中常常會用到Cache保存數據庫數據。html
1.緩存的添加:數據庫
Cache的添加方法有Add()或Insert(),兩種方法幾乎相似,只是Inser方法能夠使用可選參數,即便用默認參數,來實現緩存的添加:緩存
Cache.Add(less
KeyName,//緩存名post
KeyValue,//要緩存的對象性能
Dependencies,//依賴項ui
AbsoluteExpiration,//絕對過時時間this
SlidingExpiration,//相對過時時間spa
Priority,//優先級orm
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. |