.NET中的缓存

来源:互联网 发布:软件信息安全认证 编辑:程序博客网 时间:2024/05/16 09:10

      今天学习了.net中的缓存,试着做了一下,感觉还不错。

 

      主要是用HttpRuntime.Cache,AggregateCacheDependency和SqlCacheDependency来缓存数据。

 

       首先页面上有个GridView绑定了数据库中的UserInfo表,在用户第一次请求此页面时,数据从数据库中查询出来,并把数据添加到Cache中,之后此页面的请求都从Cache中取数据,直到数据库中Userinfo表的数据更改已后,自动从Cache中移除数据,然后在下一次请求的时候,从数据库中查询数据,并把数据添加到Cache中。

 

      代码如下,aspx页面代码就不贴出来了,就是一个GridView。

  1.     //页面加载
  2.     protected void Page_Load(object sender, EventArgs e)
  3.     {
  4.         if (!IsPostBack&&!IsAsync)
  5.         {
  6.             this.FillDate();
  7.         }
  8.     }
  9.     //填充数据
  10.     private void FillDate()
  11.     {
  12.         string name = txtName.Text.Trim();
  13.         this.GridView1.DataSource = this.GetDataSource(name);
  14.         this.GridView1.DataBind();
  15.     }
  16.     /// <summary>
  17.     /// 获得数据源
  18.     /// </summary>
  19.     /// <param name="name"></param>
  20.     /// <returns></returns>
  21.     private DataTable GetDataSource(string name)
  22.     {
  23.         DataTable dt = (DataTable)HttpRuntime.Cache["aa"];
  24.         //如果缓存中没有数据,将从数据库中查询出数据,并把数据添加至缓存
  25.         if (dt == null)
  26.         {
  27.             DBL.IDBOperator db = DBL.DBConncetion.DBInstance;
  28.             string sql = "SELECT   uid, username, upwd, name, gender, address, tel FROM [userinfo] WHERE name like '%" + name + "%'";
  29.             dt = db.GetDataTable(sql, CommandType.Text);
  30.             //数据库连接字串
  31.             String strConString = ConfigurationManager.ConnectionStrings["studbConnectionString"].ConnectionString;
  32.             //检索数据库中开启了更改通知的表名
  33.             string[] tableList = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(strConString);
  34.             if (!tableList.Contains("userinfo"))
  35.             {
  36.                 //启用userinfo表的更改通知
  37.                 SqlCacheDependencyAdmin.EnableTableForNotifications(strConString, "userinfo");
  38.             }
  39.             
  40.             //要缓存的数据
  41.             SqlCacheDependency sqlCache = new SqlCacheDependency("studb""userinfo");
  42.             //建立缓存依赖
  43.             AggregateCacheDependency aggCache = new AggregateCacheDependency();
  44.             aggCache.Add(sqlCache);
  45.             //把数据加入缓存
  46.             HttpRuntime.Cache.Add("aa", dt, aggCache, DateTime.Now.AddMinutes(60), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default,null);
  47.         }
  48.         return dt;
  49.     }

      这样做的好处是在查询数据时避免反复打开和关闭数据连接。

      注意:

      (1)在Web.config还要加入如下节点:

         <caching>
      <sqlCacheDependency pollTime="10000">
        <databases>
          <add name="studb" connectionStringName="studbConnectionString" pollTime="10000"/>
        </databases>
      </sqlCacheDependency>
    </caching>

 

    (2)默认情况下,SQL Server 2005 数据库不启用服务中介程序。 必须使用 ALTER DATABASE 命令为每个数据库启用服务中介程序。

 

    

      若要通过使用 SQL Server Management Studio 在 AdventureWorks 数据库上启用 Service Broker,请执行下面的 Transact-SQL 语句:

 

     ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

 

     (3)不能使用Windows帐户。

   

原创粉丝点击