昨天整理了一下緩存的基本用法,和緩存依賴(lài)類(lèi) CacheDependency類(lèi)的使用,今天整理一下緩存的數(shù)據(jù)庫(kù)依賴(lài)類(lèi)SqlCacheDependency
1、數(shù)據(jù)庫(kù)依賴(lài)類(lèi)SqlCacheDependency
數(shù)據(jù)庫(kù)緩存依賴(lài)主要解決的是當(dāng)數(shù)據(jù)庫(kù)的內(nèi)容發(fā)生改變時(shí),如何及時(shí)通知緩存,并更新緩存中的數(shù)據(jù)的問(wèn)題。
語(yǔ)法定義:
SqlCacheDependency類(lèi)主要的構(gòu)造函數(shù)如下:
public SqlCacheDependency(string database,string table)
其中參數(shù)一代表要啟用緩存的數(shù)據(jù)庫(kù),參數(shù)二表示緩存的表。在實(shí)際使用過(guò)程中,只需要指明緩存的數(shù)據(jù)庫(kù)和表即可。
方法是屬性的應(yīng)用(代碼于CacheDependency類(lèi)似),不過(guò)Sql需要先進(jìn)行一下對(duì)web.config進(jìn)行配置和設(shè)置數(shù)據(jù)庫(kù)的緩存配置一下才可以使用SqlCacheDependency緩存類(lèi)
第一步web.config配置如下:
<!--連接數(shù)據(jù)庫(kù)語(yǔ)句--><configuration> <connectionStrings> <add name="Config" connectionString="Data Source=.;Initial Catalog=CacheData;Persist Security Info=True;User ID=sa;PassWord=123"
2、Vs緩存配置:
打開(kāi)“開(kāi)始”|“所有程序”|“Microsoft Visual Studio 2010”|“Visual Studio Tools”|“Visual Studio 2010命名提示”菜單命令。
在命令框內(nèi)輸入:aspnet_regsql.exe -S SqlServer服務(wù)器 -U <Username> -P <Password> -ed -d 數(shù)據(jù)庫(kù)名稱(chēng) -et -t 表名
若無(wú)身份驗(yàn)證輸入:aspnet_regsql.exe -S SqlServer服務(wù)器 -ed -d 數(shù)據(jù)庫(kù)名稱(chēng) -et -t 表名
執(zhí)行命令即可;
3、頁(yè)面代碼;
private static SqlCacheDependency MyDep; protected void Page_Load(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); if (!IsPostBack) { //Cache為數(shù)據(jù)庫(kù)名,T_SqlCache為緩存表 DataSet ds = GetSet(); if (Cache["SqlCon"] == null) { //添加緩存SqlCon,緩存值為數(shù)據(jù)庫(kù)表內(nèi)容, 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) {//當(dāng)數(shù)據(jù)庫(kù)值更改時(shí)提醒; Response.Write("數(shù)據(jù)庫(kù)修改時(shí)間為:"+MyDep.UtcLastModified); } if (Cache["SqlCon"] == null) {//當(dāng)緩存過(guò)期或數(shù)據(jù)庫(kù)值修改后緩存從新加載 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"];//綁定數(shù)據(jù) 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;//連接數(shù)據(jù)庫(kù)語(yǔ)句 using (SqlConnection cnn = new SqlConnection(Config)) { using (SqlCommand cmm = new SqlCommand(sql, cnn)) { SqlDataAdapter dapter = new SqlDataAdapter(cmm); dapter.Fill(ds); } } return ds; }C#緩存基本內(nèi)容就差不多這些,一些實(shí)踐的應(yīng)用等一會(huì)用到在總結(jié)出來(lái),地下順便轉(zhuǎn)載一些session和Cache的區(qū)別:
Session和Cache的區(qū)別
以前實(shí)現(xiàn)數(shù)據(jù)的緩存有很多種方法,有客戶(hù)端的Cookie,有服務(wù)器端的Session和application。其中Cookie是保存在客戶(hù)端的一組數(shù)據(jù),主要用來(lái)保存用戶(hù)名等個(gè)人信息。Session則保存對(duì)話(huà)信息。Application則是保存在整個(gè)應(yīng)用程序范圍內(nèi)的信息,相當(dāng)于全局變量。通常使用最頻繁的是Session,那么Session和Cache又有什么區(qū)別呢?
本節(jié)結(jié)合使用經(jīng)驗(yàn),詳細(xì)介紹Session緩存和Cache緩存的區(qū)別。
(1)最大的區(qū)別是Cache提供緩存依賴(lài)來(lái)更新數(shù)據(jù),而Session只能依靠定義的緩存時(shí)間來(lái)判斷緩存數(shù)據(jù)是否有效。
(2)即使應(yīng)用程序終止,只要Cache.Add方法中定義的緩存時(shí)間未過(guò)期,下次開(kāi)啟應(yīng)用程序時(shí),緩存的數(shù)據(jù)依然存在。而Session緩存只是存在于一次會(huì)話(huà)中,會(huì)話(huà)結(jié)束后,數(shù)據(jù)也就失效了。
(3)Session容易丟失,導(dǎo)致數(shù)據(jù)的不確定性,而Cache不會(huì)出現(xiàn)這種情況。
(4)由于Session是每次會(huì)話(huà)就被加載,所以不適宜存放大量信息,否則會(huì)導(dǎo)致服務(wù)器的性能降低。而Cache則主要用來(lái)保存大容量信息,如數(shù)據(jù)庫(kù)中的多個(gè)表。
(5)VS2005的測(cè)試版提供了將緩存保存在硬盤(pán)上的參數(shù),但正式版中取消了這個(gè)功能,估計(jì)其在以后版本中會(huì)重新實(shí)現(xiàn)。而Session目前只能保存在內(nèi)存中,對(duì)其性能有影響。
為了提高Cache的有效利用率,建議對(duì)于不經(jīng)常改動(dòng)的數(shù)據(jù)使用Cache。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注