欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#缓存之SqlCacheDependency用法实例总结

程序员文章站 2024-02-16 09:39:16
本文整理汇总了c#缓存的数据库依赖类sqlcachedependency的使用方法,具体内容如下: 1、数据库依赖类sqlcachedependency 数据库缓存依赖...

本文整理汇总了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。