当前位置: 移动技术网 > IT编程>开发语言>c# > C#缓存之SqlCacheDependency用法实例总结

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网