系统缓存全解析1:数据库缓存依赖.docx_第1页
系统缓存全解析1:数据库缓存依赖.docx_第2页
系统缓存全解析1:数据库缓存依赖.docx_第3页
系统缓存全解析1:数据库缓存依赖.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能。但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致。那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验。 答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency数据库缓存依赖。 实现步骤: 下面就让我们看一下如何实现数据库缓存依赖功能:第一步: 修改web.config,让项目启用SqlCacheDependency 。将下列代码加入web.config的节: 这里的connectionStringName指定了在中添加的某一个连接字符串。name则是为该SqlCacheDependency起的名字,这个名字将在第3步中用到。SqlCacheDependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。 注意:在节的中的name属性值必须和第三步的Page_Load代码中System.Web.Caching.SqlCacheDependency(codematic, P_Product); 中的第一个参数(数据库名称)相一致。 第二步:执行下述命令,为 数据库启用缓存依赖。如果要配置SqlCacheDependency,则需要以命令行的方式执行。aspnet_regsql.exe工具位于WindowsMicrosoft.NETFramework版本文件夹中。aspnet_regsql -C data source=;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依赖: / / 获取当前应用程序指定CacheKey的Cache对象值/ / 索引键值/ 返回缓存对象public static object GetCache(string CacheKey) System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCacheCacheKey;/ / 设置以缓存依赖的方式缓存数据/ / 索引键值/ 缓存对象/ 依赖对象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=;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 文件的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论