.net Cache的使用方法

   ASP.NET Cache是提升系統性能的重要方法,它使用了“最近使用”原則(a least-recently-used algorithm)。在數據庫訪問中經常會用到Cache保存數據庫數據。

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.

發佈了31 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章