本文整理匯總了C#緩存的數據庫依賴類SqlCacheDependency的使用方法,具體內容如下:
1、數據庫依賴類SqlCacheDependency
數據庫緩存依賴主要解決的是當數據庫的內容發生改變時,如何及時通知緩存,并更新緩存中的數據的問題。
語法定義:
SqlCacheDependency類主要的構造函數如下:
public SqlCacheDependency(string database,string table)
其中參數一代表要啟用緩存的數據庫,參數二表示緩存的表。在實際使用過程中,只需要指明緩存的數據庫和表即可。
方法是屬性的應用(代碼與CacheDependency類似),不過Sql需要先進行一下對web.config進行配置和設置數據庫的緩存配置一下才可以使用SqlCacheDependency緩存類
首先web.config配置如下:
<!--連接數據庫語句--> <configuration> <connectionStrings> <add name="Config" connectionString="Data Source=.;Initial Catalog=CacheData;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/> </connectionStrings> <!--在system.web節點下添加--><!--注意事項:配置中add name值為數據庫名,connectionStringName為連接數據庫字段的名稱要相同--> <caching><sqlCacheDependency enabled="true" pollTime="1000"><databases> <add name="CacheData" connectionStringName="Config" pollTime="1000"/></databases></sqlCacheDependency></caching>
2、Vs緩存配置:
打開“開始”|“所有程序”|“Microsoft Visual Studio 2010”|“Visual Studio Tools”|“Visual Studio 2010命名提示”菜單命令。
在命令框內輸入:aspnet_regsql.exe -S SqlServer服務器 -U <Username> -P <Password> -ed -d 數據庫名稱 -et -t 表名
若無身份驗證輸入:aspnet_regsql.exe -S SqlServer服務器 -ed -d 數據庫名稱 -et -t 表名
執行命令即可;
3、頁面代碼;
private static SqlCacheDependency MyDep; protected void Page_Load(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); if (!IsPostBack) { //Cache為數據庫名,T_SqlCache為緩存表 DataSet ds = GetSet(); if (Cache["SqlCon"] == null) { //添加緩存SqlCon,緩存值為數據庫表內容, MyDep = new SqlCacheDependency("Cache", "T_SqlCache"); Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null); } } } protected void Button1_Click(object sender, EventArgs e) { if (MyDep.HasChanged) {//當數據庫值更改時提醒; Response.Write("數據庫修改時間為:"+MyDep.UtcLastModified); } if (Cache["SqlCon"] == null) {//當緩存過期或數據庫值修改后緩存從新加載 MyDep = new SqlCacheDependency("Ajax", "T_AjaxLD"); DataSet ds = GetSet(); Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null); } this.GridView1.DataSource = Cache["SqlCon"];//綁定數據 this.GridView1.DataBind(); } /// <summary> /// 生成Dataset /// </summary> /// <returns></returns> private DataSet GetSet() { DataSet ds = new DataSet(); string sql = "select * from T_SqlCache"; string Config = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;//連接數據庫語句 using (SqlConnection cnn = new SqlConnection(Config)) { using (SqlCommand cmm = new SqlCommand(sql, cnn)) { SqlDataAdapter dapter = new SqlDataAdapter(cmm); dapter.Fill(ds); } } return ds; }
C#緩存基本內容就差不多這些,一些應用需要在實踐中總結出來,此處順便分析一下session和Cache的區別:
Session和Cache的區別:
以前實現數據的緩存有很多種方法,有客戶端的Cookie,有服務器端的Session和Application。其中Cookie是保存在客戶端的一組數據,主要用來保存用戶名等個人信息。Session則保存對話信息。Application則是保存在整個應用程序范圍內的信息,相當于全局變量。通常使用最頻繁的是Session,那么Session和Cache又有什么區別呢?
本節結合使用經驗,詳細介紹Session緩存和Cache緩存的區別如下:
(1)最大的區別是Cache提供緩存依賴來更新數據,而Session只能依靠定義的緩存時間來判斷緩存數據是否有效。
(2)即使應用程序終止,只要Cache.Add方法中定義的緩存時間未過期,下次開啟應用程序時,緩存的數據依然存在。而Session緩存只是存在于一次會話中,會話結束后,數據也就失效了。
(3)Session容易丟失,導致數據的不確定性,而Cache不會出現這種情況。
(4)由于Session是每次會話就被加載,所以不適宜存放大量信息,否則會導致服務器的性能降低。而Cache則主要用來保存大容量信息,如數據庫中的多個表。
(5)VS2005的測試版提供了將緩存保存在硬盤上的參數,但正式版中取消了這個功能,估計其在以后版本中會重新實現。而Session目前只能保存在內存中,對其性能有影響。
此外,需要特別注意:為了提高Cache的有效利用率,建議對于不經常改動的數據使用Cache。
新聞熱點
疑難解答