欢迎来到天天文库
浏览记录
ID:39550859
大小:232.00 KB
页数:5页
时间:2019-07-06
《【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、【状态保持】Cache基于SQL数据库的缓存依赖-------轮询机制详解当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础。应用程序可以通过两种途径获取数据变化的信息: 1.数据库通知 当数据库中的信息发生变化的时候,数据库会主动通知Framework 或者说通知应用程序。 2.轮询(今天的重点)数据库不能通知的时候,应用程序可以主动定期访问数据库(在配置文件中可以配置间隔多长时间访问一次),检查数据是否发生变化。 第一种数据库通知是最理想的方式,但是许多数据库都不支持这个方法,SQLserver2005+的版本
2、支持这个方法,如果数据库不支持通知机制比如SQLserver2000数据库现在主机比较普遍的数据库,那么我们就得通过轮询机制来实现。 轮询: 使用轮询的话也不可能在重新查一次然后再和以前的数据做比较,如果这样的话如果我一个表里面有1000行数据我要是读100次的话是不是得比较1000x100次,显然这种方法是不可行的,那怎么办捏。大家都学过触发器吧,今天的轮询机制就是通过触发器来实现的。实现步骤简单分析: 首先创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号。然后,对需要监控的变增加一个触发器,当表的内容发生变化的时候进行触
3、发。我们可以用insertdeleteupdate触发器,如果一旦触发以上动作就在把那个监控表的版本号字段加1。上面的步骤要我们自己动手实现起来很麻烦,没关系跟着微软混是不会吃亏滴,微软早就为我们提供好了一个工具叫Aspnet_regsql.exe这个工具位于C:WindowsMicrosoft.NETFrameworkv2.0.50727这个路径下(也不一定但是一般就是这个路径)好了有工具了具体怎么用呢?具体帮助请运行Aspnet_regsql/?查看下面列出本文要用到的参数 -U用户名 -P密码 -d数据库名称,默认为aspnetdb数据
4、库 -ed为数据库打开SQL缓存依赖支持 -dd关闭数据库的SQL缓存依赖支持 -et指定SQL缓存依赖使用的表,需要使用-t指定表名 -dt禁用SQL缓存依赖使用的表,需要使用-t指定表名 -t指定表名 -lt列出启用缓存依赖的表名启用数据库House缓存依赖支持,并对Home表启用缓存依赖,如下: aspnet_regsql-S.-E-ed-dHouse-et-tHomelv包包、古奇女包、coach包:www.naitiao.com
5、兔毛皮草、獭兔皮草、皮草服饰:www.shideke.com 运行后数据库会发生以下变化:1.增加了一个
6、名称为AspNet_SqlCacheTablesForChangeNotification的表2.Home表中增加了一个触发器setANSI_NULLSONsetQUOTED_IDENTIFIERONgoALTERTRIGGER[Home_AspNet_SqlCacheNotification_Trigger]ON[dbo].[Home]FORINSERT,UPDATE,DELETEASBEGINSETNOCOUNTONEXECdbo.AspNet_SqlCacheUpdateChangeIdStoredProcedureN'Home'END3.增加了几个
7、存储过程 如下图lv包包、古奇女包、coach包:www.naitiao.com
8、兔毛皮草、獭兔皮草、皮草服饰:www.shideke.com下面咱打开它建的那个表看看是什么东东是不是和开始咱描述的步骤差不多它这还多了一个有关时间的列ok下面咱手动修改一个Home表中的数据看看这个监视表有什么变化 lv包包、古奇女包、coach包:www.naitiao.com
9、兔毛皮草、獭兔皮草、皮草服饰:www.shideke.com怎么样changeId变了吧!应用程序就是定期查询这个表的变化然后确定是否更新缓存。数据库配置完毕,在看看网站怎么配置吧!首先,打开we
10、b.config加入如下代码 在system.web节点下其中pollTime属性就是应用程序间隔多长时间主动访问一次数据库默认为1分钟,单位ms注意最低为500ms 这里是为了演示效果明显
11、设到最低下面是测试代码 protectedSystem.Text.
此文档下载收益归作者所有