【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
更新时间:2023-05-22 13:20:01 阅读量: 实用文档 文档下载
- 保持状态英文推荐度:
- 相关推荐
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础。应用程序可以通过两种途径获取数据变化的信息:
1. 数据库通知 当数据库中的信息发生变化的时候,数据库会主动通知Framework 或者说通知应用程序。 2. 轮询(今天的重点) 数据库不能通知的时候,应用程序可以主动定期访问数据库(在配置文件中可以配置间隔多长时间访问一次),检查数据是否发生变化。
第一种 数据库通知是最理想的方式,但是许多数据库都不支持这个方法,SQL server 2005 + 的版本支持这个方法,如果数据库不支持通知机制比如SQL server 2000 数据库 现在主机比较普遍的数据库,那么我们就得通过轮询机制来实现。
轮询: 使用轮询的话也不可能在重新查一次然后再和以前的数据做比较,如果这样的话如果我一个表里面有1000行数据我要是读100次的话是不是得比较1000 x 100 次,显然这种方法是不可行的,那怎么办捏。大家都学过触发器吧,今天的轮询机制就是通过触发器来实现的。
实现步骤简单分析:
首先创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号。然后,对需要监控的变增加一个触发器,当表的内容发生变化的时候进行触发。我们可以用insert delete update 触发器,如果一旦触发以上动作就在把那个监控表的版本号字段加1。 上面的步骤要我们自己动手实现起来很麻烦,没关系跟着微软混是不会吃亏滴,微软早就为我们提供好了一个工具叫Aspnet_regsql.exe 这个工具位于C:\Windows\\Framework\v2.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
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
运行后数据库会发生以下变化:
1. 增加了一个名称为AspNet_SqlCacheTablesForChangeNotification的表 2. Home表中增加了一个触发器
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON go
ALTER TRIGGER [Home_AspNet_SqlCacheNotification_Trigger] ON [dbo].[Home] FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'Home'
END
3. 增加了几个存储过程 如下图
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
下面咱打开它建的那个表看看是什么东东
是不是和开始咱描述的步骤差不多它这还多了一个有关时间的列
ok 下面咱手动修改一个Home表中的数据看看这个监视表有什么变化
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
怎么样 changeId 变了吧!应用程序就是定期查询这个表的变化然后确定是否更新缓存。 数据库配置完毕,在看看网站怎么配置吧!首先,打开web.config加入如下代码 在system.web 节点下
<!-- 基于数据库的缓存依赖 --> <caching>
<sqlCacheDependency enabled="true" pollTime="500"> <databases>
<add name="pubs" connectionStringName="pubs" pollTime="500"/> </databases>
</sqlCacheDependency> </caching>
其中pollTime 属性 就是应用程序间隔多长时间主动访问一次数据库默认为1分钟,单位ms 注意最低为500ms 这里是为了演示效果明显 设到最低 下面是测试代码
protected System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(); protected void Page_Load(object sender, EventArgs e) {
List<Home> list = Cache["homeList"] as List<Home>; if (list == null) {
Response.Write("<h3>从数据库中获得的数据</h3>"); HouseEntities houseEntities = new HouseEntities(); list = houseEntities.Home.ToList<Home>(); Cache["homeList"] = list; //基于数据库的缓存依赖
SqlCacheDependency sqldep = new SqlCacheDependency("pubs", "Home"); Cache.Insert("homeList",list,sqldep); } else {
Response.Write("<h3>从缓存中获得的数据</h3>"); }
foreach (Home item in list) {
sbHtml.Append("Id:" + item.Id + "Name:" + + "Address:" + item.Address + "<br/>"); }
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解
}
注意:SqlCacheDependency sqldep = new SqlCacheDependency("pubs", "Home"); 第一个参数是配置文件中的<add> 节点下的name 属性的值,第二个参数是表名 运行效果: 1. 第一次访问
2 . 刷新一次
3. 改一下数据库中的数据
4. 刷新一次页面
正在阅读:
【状态保持】Cache 基于SQL数据库的缓存依赖-------轮询机制详解05-22
江苏省计算机10秋笔试试题12-09
基于GPON的光纤接入网设计 - 图文01-16
钟跃民经典台词欣赏02-15
2019年厦门大学公共管理系706政治学与公共管理学考研核心题库05-08
8 第五章 植物抗病性的遗传和变异05-17
《思想道德修养与法律基础》(2015版)课实践方案01-08
操作票使用管理标准最终(报批稿)10-08
小学二年级作文教案2210-07
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 缓存
- 详解
- 依赖
- 基于
- 机制
- 状态
- 保持
- 数据库
- Cache
- SQL