C#缓存之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。