【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解.doc_第1页
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解.doc_第2页
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解.doc_第3页
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解.doc_第4页
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解.doc_第5页
全文预览已结束

下载本文档

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

文档简介

【状态保持】Cache 基于SQL数据库的缓存依赖-轮询机制详解当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础。应用程序可以通过两种途径获取数据变化的信息:1. 数据库通知 当数据库中的信息发生变化的时候,数据库会主动通知Framework或者说通知应用程序。2. 轮询(今天的重点) 数据库不能通知的时候,应用程序可以主动定期访问数据库(在配置文件中可以配置间隔多长时间访问一次),检查数据是否发生变化。 第一种 数据库通知是最理想的方式,但是许多数据库都不支持这个方法,SQL server 2005 + 的版本支持这个方法,如果数据库不支持通知机制比如SQL server 2000 数据库 现在主机比较普遍的数据库,那么我们就得通过轮询机制来实现。 轮询: 使用轮询的话也不可能在重新查一次然后再和以前的数据做比较,如果这样的话如果我一个表里面有1000行数据我要是读100次的话是不是得比较1000 x 100 次,显然这种方法是不可行的,那怎么办捏。大家都学过触发器吧,今天的轮询机制就是通过触发器来实现的。实现步骤简单分析: 首先创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号。然后,对需要监控的变增加一个触发器,当表的内容发生变化的时候进行触发。我们可以用insert delete update 触发器,如果一旦触发以上动作就在把那个监控表的版本号字段加1。上面的步骤要我们自己动手实现起来很麻烦,没关系跟着微软混是不会吃亏滴,微软早就为我们提供好了一个工具叫Aspnet_regsql.exe 这个工具位于C:WindowsMicrosoft.NETFrameworkv2.0.50727这个路径下(也不一定但是一般就是这个路径)好了有工具了具体怎么用呢?具体帮助请运行Aspnet_regsql /? 查看下面列出本文要用到的参数-U 用户名-P 密码-d 数据库名称,默认为aspnetdb数据库-ed 为数据库打开SQL缓存依赖支持-dd 关闭数据库的SQL缓存依赖支持-et 指定SQL缓存依赖使用的表,需要使用-t指定表名-dt 禁用SQL 缓存依赖使用的表,需要使用-t指定表名-t 指定表名-lt 列出启用缓存依赖的表名启用数据库House 缓存依赖支持,并对Home表启用缓存依赖,如下:aspnet_regsql -S . -E -ed -d House -et -t Home运行后数据库会发生以下变化:1. 增加了一个名称为AspNet_SqlCacheTablesForChangeNotification的表2. Home表中增加了一个触发器set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER TRIGGER Home_AspNet_SqlCacheNotification_Trigger ON dbo.Home FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure NHome END3. 增加了几个存储过程 如下图下面咱打开它建的那个表看看是什么东东是不是和开始咱描述的步骤差不多它这还多了一个有关时间的列ok 下面咱手动修改一个Home表中的数据看看这个监视表有什么变化怎么样 changeId 变了吧!应用程序就是定期查询这个表的变化然后确定是否更新缓存。数据库配置完毕,在看看网站怎么配置吧!首先,打开web.config加入如下代码 在system.web 节点下 其中pollTime 属性 就是应用程序间隔多长时间主动访问一次数据库默认为1分钟,单位ms 注意最低为500ms 这里是为了演示效果明显 设到最低下面是测试代码protected System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(); protected void Page_Load(object sender, EventArgs e) List list = CachehomeList as List; if (list = null) Response.Write(从数据库中获得的数据); HouseEntities houseEntities = new HouseEntities(); list = houseEntities.Home.ToList(); CachehomeList = list; /基于数据库的缓存依赖 SqlCacheDependency sqldep = new SqlCacheDependency(pubs, Home); Cache.Insert(homeList,list,sqldep); else Response.Write(从缓存中获得的数据); foreach (Home item in list) sbHtml.Append(Id: + item.Id + Name: + item.Name + Address: + item.Address + ); 注意:SqlCacheDependency sqldep =newSqlCacheDependency(pubs,Home);第一个参数是配置文件中的 节点下的name

温馨提示

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

评论

0/150

提交评论