<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      李天平的博客


      天道酬勤
        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      系統緩存全解析6:數據庫緩存依賴

      Posted on 2009-06-30 23:19  李天平  閱讀(11253)  評論(21)    收藏  舉報

          更多的時候,我們的服務器性能損耗還是在查詢數據庫的時候,所以對數據庫的緩存還是顯得特別重要,上面幾種方式都可以實現部分數據緩存功能。但問題是我們的數據有時候是在變化的,這樣用戶可能在緩存期間查詢的數據就是老的數據,從而導致數據的不一致。那有沒有辦法做到,數據如果不變化,用戶就一直從緩存中取數據,一旦數據變化,系統能自動更新緩存中的數據,從而讓用戶得到更好的用戶體驗。

         答案是肯定的!.NET已經為我們提供了這樣一種非常好的解決方法:SqlCacheDependency數據庫緩存依賴。

        

      實現步驟:

          下面就讓我們看一下如何實現數據庫緩存依賴功能:

      第一步: 修改web.config,讓項目啟用SqlCacheDependency 。

      將下列代碼加入web.config<system.web>節:        

      <?xml version="1.0"?>

      <configuration>

          <appSettings/>

          <connectionStrings>

              <add name="strcodematic" connectionString="data source=127.0.0.1;initial catalog=codematic;user id=sa;password="  providerName="System.Data.SqlClient" />

          </connectionStrings>

          <system.web>

              <caching>

                  <sqlCacheDependency enabled="true" pollTime="6000">

                      <databases>

                          <add name="codematic" connectionStringName="strcodematic" />

                      </databases>

                  </sqlCacheDependency>         

              </caching>

          

              <compilation debug="true">

              </compilation>     

              <authentication mode="Windows"/>      

          </system.web>

      </configuration>

       

       

      這里的connectionStringName指定了在<connectionStrings>中添加的某一個連接字符串。name則是為該SqlCacheDependency起的名字,這個名字將在第3步中用到。
      SqlCacheDependency類會自動完成對此配置節信息的讀取以建立和數據庫之間的聯系。

       

      注意:

      <databases>節的<add name="codematic" connectionStringName="strcodematic" />中的name屬性值必須和第三步的Page_Load代碼System.Web.Caching.SqlCacheDependency("codematic", "P_Product"); 中的第一個參數(數據庫名稱)相一致

       


      第二步:執行下述命令,為 數據庫啟用緩存依賴。

      如果要配置SqlCacheDependency,則需要以命令行的方式執行。

      aspnet_regsql.exe工具位于Windows\\Microsoft.NET\\Framework\\[版本]文件夾中。

      aspnet_regsql -C "data source=127.0.0.1;initial catalog=codematic;user id=sa;password=" -ed -et -t "P_Product"

      參數-C后面的字符串是連接字符串(請替換成自己所需要的值),

      參數-t后面的字符串是數據表的名字。

       

       運行結果如圖15-3所示:

       

      15-3  啟用數據庫緩存依賴

       命令執行后,在指定的數據庫中會多出一個AspNet_SqlCacheTablesForChangeNotification表。

      注意:

      要使得7.0或者2000版本以上的SQLServer支持SqlCacheDependency特性,需要對數據庫服務器執行相關的配置。

      有兩種方法配置SQLServer

      一 使用aspnet_regsql命令行工具,

      二 使用SqlCacheDependencyAdmin類。

       

      例如:

      aspnet_regsql -S "server" -E -d "database" –ed  或者

      aspnet_regsql -S "server" -E -d "database" -et -t "table"
      如果是Sql驗證的話要把-E換成,-U (用戶名),-P (密碼)

       

      以下是該工具的命令參數說明

      -? 顯示該工具的幫助功能;

      -S 后接的參數為數據庫服務器的名稱或者IP地址;

      -U 后接的參數為數據庫的登陸用戶名;

      -P 后接的參數為數據庫的登陸密碼;

      -E 使用當前登錄用戶的 Windows 集成認證進行身份驗證。

      -d 后接參數為對哪一個數據庫采用SqlCacheDependency功能;

      -C 連接數據庫的連接字符串。如果您指定服務器(-S)和登錄(-U-P,或 -E)信息,則此選項不是必需的,因為連接字符串已經包含這些信息。

      -t 后接參數為對哪一個表采用SqlCacheDependency功能;

      -ed 允許對數據庫使用SqlCacheDependency功能;

      -dd 禁止對數據庫采用SqlCacheDependency功能;

      -et 允許對數據表采用SqlCacheDependency功能;

      -dt 禁止對數據表采用SqlCacheDependency功能;

      -lt 列出當前數據庫中有哪些表已經采用sqlcachedependency功能。

       


      第三步:在代碼中使用緩存,并為其設置SqlCacheDependency依賴:

         

      /// <summary>

      /// 獲取當前應用程序指定CacheKeyCache對象值

      /// </summary>

      /// <param name="CacheKey">索引鍵值</param>

      /// <returns>返回緩存對象</returns>

      public static object GetCache(string CacheKey)

      {

          System.Web.Caching.Cache objCache = HttpRuntime.Cache;

          return objCache[CacheKey];

      }

      /// <summary>

      /// 設置以緩存依賴的方式緩存數據

      /// </summary>

      /// <param name="CacheKey">索引鍵值</param>

      /// <param name="objObject">緩存對象</param>

      /// <param name="cacheDepen">依賴對象</param>

      public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)

      {

          System.Web.Caching.Cache objCache = HttpRuntime.Cache;

          objCache.Insert(

              CacheKey,

              objObject,

              dep,

              System.Web.Caching.Cache.NoAbsoluteExpiration,//從不過期

              System.Web.Caching.Cache.NoSlidingExpiration,//禁用可調過期

              System.Web.Caching.CacheItemPriority.Default,

              null);

      }

      protected void Page_Load(object sender, EventArgs e)

      {

          string CacheKey = "cachetest";

          object objModel = GetCache(CacheKey);//從緩存中獲取

          if (objModel == null)//緩存里沒有

          {

              objModel = GetData();//把當前時間進行緩存

              if (objModel != null)

              {

                  //依賴數據庫codematic中的P_Product表變化 來更新緩存

                  System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("codematic", "P_Product");

                  SetCache(CacheKey, objModel, dep);//寫入緩存

              }

          }

                     

          GridView1.DataSource = (DataSet)objModel;

          GridView1.DataBind();

      }

       

      //查詢數據

      private DataSet GetData()

      {

          string conString = "data source=127.0.0.1;initial catalog=codematic;user id=sa;password=";

          string strSQL = "SELECT * FROM P_Product";

          SqlConnection myConnection = new SqlConnection(conString);

          DataSet ds = new DataSet();

          myConnection.Open();

          SqlDataAdapter adapter = new SqlDataAdapter(strSQL, myConnection);

          adapter.Fill(ds, "Product");

          myConnection.Close();

          return ds;

      }

       

       

           從以上代碼可以看出,和文件依賴基本相同,只是在存放緩存SetCache時存入的依賴對象不同罷了。這里用的是SqlCacheDependency。

           其中,創建SqlCacheDependency的構造方法:

      public SqlCacheDependency (string databaseEntryName,string tableName)

       

      l  databaseEntryName :是在Web.config 文件的 caching 節的 sqlCacheDependency databases 元素中定義的數據庫的名稱。

      l  tableName :與 SqlCacheDependency 關聯的數據庫表的名稱。

          這樣,只有當P_Product表的內容發生變化時,查詢操作才會重新查詢數據更新緩存的內容,可以大大減少數據庫的重復查詢和提高系統的性能和運行效率。

        

      主站蜘蛛池模板: 无码人妻一区二区三区AV| 99国产欧美另类久久久精品| 粉嫩av一区二区三区蜜臀| 成年午夜免费韩国做受视频| 亚洲日本va午夜中文字幕久久| 久久精品噜噜噜成人av| 精品国精品国自产在国产| 日本一道高清一区二区三区| 亚洲国产午夜精品福利| 亚洲国产成人久久综合一区77| 欧美人妻一区二区三区| 亚洲欧洲一区二区综合精品| 日本久久99成人网站| 望奎县| 丰满熟妇乱又伦在线无码视频| 在线 欧美 中文 亚洲 精品| 国产一区二区三区在线观看免费| 色综合天天综合网国产人| 又色又污又爽又黄的网站| 国产精品三级中文字幕| 日本高清一区免费中文视频| 疯狂做受XXXX高潮国产| 99久久精品国产免费看| 欧美嫩交一区二区三区| 免费无遮挡毛片中文字幕| 亚洲gv天堂无码男同在线观看 | 一出一进一爽一粗一大视频| 国产av丝袜旗袍无码网站| 国产亚洲精品久久久久久大师 | 狠狠色婷婷久久综合频道日韩 | 亚洲人妻一区二区精品| 亚洲高清无在码在线无弹窗| 亚洲最大激情中文字幕| 中文字幕无码免费久久 | 中文字幕人成无码免费视频| 国产肥妇一区二区熟女精品| 亚洲午夜天堂| 99在线视频免费观看| 国精一二二产品无人区免费应用| 99精品国产一区二区三| 免费a级黄毛片|