深入System.Web.Caching命名空間 教你Hold住緩衝管理(二)

來源:互聯網
上載者:User

本文分三篇,從緩衝所在命名空間System.Web.Caching開始,詳細的介紹.NET架構提供的緩衝類和操作方法。看完之後你將學會:

  • 第一篇-如何?簡單的資料緩衝
  • 第二篇-緩衝從檔案中讀取的資料,並通過檔案依賴實現快取資料的及時更新
  • 第三篇-快取資料庫中的整張表,並通過資料庫依賴實現快取資料的及時更新

在學習了第一篇Cache類的用法後,下面我們來繼續看看如果緩衝從檔案中讀取的的資料,並通過緩衝依賴類CacheDependency實現快取資料的及時更新。

一,緩衝依賴類CacheDependency

  CacheDependency類是架設在Cache類和實際資料之前的橋樑,其具體的意義是當緩衝對象的實際資料發生改變的時候,它能及時的通知緩衝對象。

  假如緩衝對象”Player“儲存的是一個XML檔案的資料,如果XML檔案發生了變化,那麼系統通過CacheDependency類就會及時的更新緩衝對象的內容,保證使用者讀取的永遠是最新的資料。

  1.文法定義

  CacheDependency類的文法定義如下:

public class CacheDependency : IDisposable

  繼承了介面”IDisposable“,此介面主要用來定義釋放分配的非託管資源的方法。繼承此介面的類,必須實現方法Dispone ,實現資源的釋放。

  繼承這個介面有什麼好處呢,看下面一段代碼:

    using (CacheDependency mydep = new CacheDependency("player.xml"))    {        //dosomething     }

  這樣使用using來建立一個新對象,在出了這個範圍之後,即”{}“內的代碼執行完畢,系統就會自動調用Dispone來釋放該對象佔用的資源。

  經常開啟資料庫連結又懶得去顯式關閉的同學,對此應該比較熟悉。

  CacheDependency類建構函式實現了8個對外公開的重載,雖然全部列出麻煩了點,但為了知道CacheDependency究竟能為緩衝帶來什麼優勢,我們來細說一下每個重載。

1 public CacheDependency(string filename);2 public CacheDependency(string[] filenames);
3 public CacheDependency(string[] filenames, string[] cachekeys);
4 public CacheDependency(string filename, DateTime start);
5 public CacheDependency(string[] filenames, DateTime start);
6 public CacheDependency(string[] filenames, string[] cachekeys, CacheDependency dependency);//dependency參數聲明此依賴項依賴另外一個CacheDependency的執行個體
7 public CacheDependency(string[] filenames, string[] cachekeys, DateTime start);
8 public CacheDependency(string[] filenames, string[] cachekeys, CacheDependency dependency, DateTime start);

  (1)監視檔案或目錄<參數filename>更改情況,當該資源發生變化時,與此依賴項對象關聯的緩衝對象將到期,並從緩衝中移除。

  (2)監視一組檔案或目錄<參數filenames>更改情況,當這些資源中任何一個變化時,處理同上。

  (3)監視一組檔案或目錄<參數filenames>的同時,也監視一組緩衝鍵<參數cachekeys>的更改情況,當這些資源中任何一個變化時,處理同上。

  這三個是最基本的建構函式,其他的重載只是聲明了此依賴項所依賴另外一個CacheDependency的執行個體<參數dependency>,

  或是監視對象上次修改日期所依據的日期和時間<參數start>。

  2.方法和屬性

  CacheDependency的組成結構與它重要的功能比起來,較為簡單。主要有兩個屬性和一個方法:

  • 屬性”HasChanged“:判斷CacheDependency對象是否已更改。
  • 屬性”UtcLastModified“:返回上次依賴項的修改日期。
  • 方法”Dispose“:釋放CacheDependency對象佔用的資源。

  我們在最後的應用的例子中來瞭解這些屬性和方法的使用。

 

二,典型應用:用CacheDependency擷取最新的資料

  我們這裡需要使用CacheDependency類來實現資料的及時更新。示範中使用GridView來顯示一個XML檔案的資料,當XML檔案資料發生改變時,用戶端可以及時更新。

  先來看下實現的過程圖解:

  

 

  下面我們來實現這個過程。

  1,首先我們使用VisualStudio建立一個ASP.NET網站,命名為”JohnConnor.CacheDependencySample“,並在根目錄下添加一個檔案名稱為players的XML檔案:

<?xml version="1.0" encoding="utf-8" ?><playerslist>    <player>        <name>KobeByrant</name>        <height>1.98m</height>    </player>    <player>        <name>AllenIverson</name>        <height>1.83m</height>    </player></playerslist>

  2,我們開啟預設產生的Default .aspx頁,在設計檢視中添加一個GridView和按鈕和一個Label控制項。然後在程式碼檢視的Page_Load事件中添加產生緩衝的代碼:

 private static CacheDependency mydepen;        protected void Page_Load(object sender, EventArgs e)        {            if (!Page.IsPostBack)            {                DataSet myds = new DataSet();//建立XML資料來源                myds.ReadXml(this.MapPath(Request.ApplicationPath + @"/players.xml"));//資料來源來自檔案players.xml                if (Cache["Players"] == null)//判斷緩衝是否存在                {                    mydepen = new CacheDependency(this.MapPath(Request.ApplicationPath + @"/players.xml"));//建立緩衝依賴                    //添加快取項目                    Cache.Add("Players", myds, mydepen, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null);                }            }        }

  3,最後我們在按鈕的Click事件裡判斷實際資料是否被修改,如果修改則重建緩衝和依賴,並綁定資料:

 protected void Button1_Click(object sender, EventArgs e)        {            if (mydepen.HasChanged)//判斷實際資料是否發生了變化            {                Label1.Text="球員列表已經改變,上一次修改時間:" + mydepen.UtcLastModified;                DataSet myds = new DataSet();//建立XML資料來源                myds.ReadXml(this.MapPath(Request.ApplicationPath + @"/players.xml"));//資料來源來自檔案players.xml                mydepen = new CacheDependency(this.MapPath(Request.ApplicationPath + @"/players.xml"));//重新建立緩衝依賴                //重新添加快取項目                Cache.Add("Players", myds, mydepen, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null);            }            GridView1.DataSource = Cache["Players"];            GridView1.DataBind();        }

  現在F5運行,點擊按鈕就會得到XML檔案中的資料:

  

  然後我們對XML檔案進行修改,添加一個球員,點擊按鈕,就會重新整理緩衝,顯示最新的資料:

  

  雖然我的名字出現在這裡有點突兀哈哈,請大家不要噴我。

  這一篇我們解決了使用檔案依賴來進行緩衝及時更新的問題。

  下一篇我們要解決的問題是當資料庫內容發生改變時,如何及時通知緩衝,並更新緩衝中的資料,請大家多多支援。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.