【转】SqlCacheDependency的使用 强大的功能

原文发布时间为:2009-10-25 —— 来源于本人的百度文章 [由搬家工具导入]

    最近我在忙于研究负载平衡、并发性容错性等性能优化问题,ASP.NET有太多强大的功能等待学习和挖掘。今天,Bosnma和大家一起研究在ASP.NET中缓存机制如何帮助我们在高流量网站中减少服务器负担。何为缓存          缓存无处不在,尤其是流量较高的网站。对于某些页面(尤其是带有一个或更多数据库操作的页面)可能会对数据库服务器带来过大的负载,而这些负载经常是不必要的。比如某公司的商品清单页面可能在一个小时,一天甚至更长时间并未改变,遗憾的是每一个浏览该页面的用户都会造成数据库的连接及查询。缓存就是为了解决这样的问题应运而生。缓存的简单实现           在ASP.NET中实现缓存的最简单的方法就是在页面上加一个OutputCache标签。<% @ OutputCache Duration ="20" VaryByParam ="*" %>     其中Duration指定了缓存的过期时间。上面的句子表示该页面的数据库查询操作在20秒内会自动保存到缓存中,不再重复连接数据库,在高流量的网站中大大减轻了数据库的负载。没有免费午餐          PageCache简单好用,可是有点小小的问题。例如在一个论坛中的首页往往都会用到PageCache,这样最新发表的帖子不会立即显示在首页上,而是需要等待一段时间(缓存过期)后才会出现,而这种延迟在某些场合是完全不允许的。比如购物商城的网站,某人已经订购了最后一批货物,而由于缓存机制,其他人查看状态时依然是订购前的(未被订购),我想你不会希望两个人买你仅有的一件商品。ASP.NET里面的Cache并不能自动根据数据库中相应数据发生了变化,而使相应的Cache过期,ASP.NET 2.0中新增的SqlCacheDependency特性使这成为了可能。我们今天的主题就此引出。强大的SqlCacheDependency SqlCacheDependency在保证更新同步的前提下通过缓存减小数据库负载。那么如何使用它呢?1、 使数据库支持SqlCacheDependency
在.Net Framework 2.0 的安装目录下(通常是WINDOWS\Microsoft.NET\Framework\v2.0.XXXXX),有一个aspnet_regsql.exe,这个命令行工具可以帮助我们使数据库支持SqlCacheDependency特性,

首先:“aspnet_regsql –S 服务器名 –U 登陆名 ID –P 密码 –d 数据库名 –ed”,这个命令使指定数据库支持SqlCacheDependency, 然后我们再加入要追踪的数据表:“aspnet_regsql –S 服务器名 –U 登陆名 ID –P 密码 –d 数据库名 –t 追踪的数据表 –et”,这个命令使指定的Table支持SqlCacheDependency。 指令运行后,在指定的数据库中会新建一个Table,叫做“AspNet_SqlCacheTablesForChangeNotification”,这个表有三个字段,“tableName”记录要追踪的数据表的名称,“notificationCreated”记录开始追踪的时间,“changeId”是一个int类型的字段,每当追踪的数据表的数据发生变化时,这个字段的值就加1。 它还会在指定的数据库中增加几个存储过程,用来让ASP.NET引擎查询追踪的数据表的情况。 然后,它会给我们要追踪的Table加上几个Trigger,分别对应到Insert、Update、Delete操作,这几个Trigger的语句非常简单,就是把“AspNet_SqlCacheTablesForChangeNotification”表中对应“tableName”字段为这个追踪的表的名称的记录的“changeId”字段加上一个1。 ASP.NET引擎通过执行它加上的存储过程“AspNet_SqlCachePollingStoredProcedure”,这个存储过程直接返回“AspNet_SqlCacheTablesForChangeNotification”表的内容,让ASP.NET引擎知道哪个表的数据发生的变化。默认每500毫秒执行这个存储过程一次,不过可以在web.config里面修改这个间隔时间。

2、 web.config配置
< system.web >     <!-- 配置Cache 结点 , 使网站 支持SqlCacheDependency -->     < cache >       < sqlCacheDependency enabled = " true " pollTime = " 500 " >         < databases >           < add name = " CacheDB " connectionStringName = " CS " />         </ databases >       </ sqlCacheDependency >     </ cache > </ system.web > 3、 在页面上的outputCache标签中指定SqlCacheDependency特性: <% @ OutputCache Duration ="9999" VaryByParam ="None" SqlDependency ="CacheDB:TableName" %> 其中TableName为追踪的表名,只要在这个追踪的Table上执行了Insert、Update、Delete操作,数据表上的Trigger就会将数据库中“ AspNet_SqlCacheTablesForChangeNotification”表的相应记录的相应“changId”字段值修改,然后ASP.NET 引擎就会通过获取新的值来得知追踪的Table的内容发生了变化,自动使这个页面的cache失效 最后         同样的网站,同样的功能,在 安全性 、 并发性 、 容错性 很多方面都会有所不同,而网站的好坏并不是看他有多少花哨的功能或多么华丽的界面,而是他是否实用、稳定、效率、安全。 ASP.NET 博大精深,看来好多东西,都是“越学越浅”的。

时间: 2024-08-11 04:35:54

【转】SqlCacheDependency的使用 强大的功能的相关文章

XML真正强大的功能是来自其元素与封装的内容

创建文档类型声明 一般而言,XML声明放在文档顶部.在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号.查看程序清单A: 程序清单 A <?php// create doctype$dom = new DOMDocument("1.0"); // display document in browser as plain text// display document in browser as plain text// for readability pu

mod_rewrite是Apache的一个非常强大的功能

mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法!对初学者很有用的哦! 1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到"Loaded Modules",其中列出了所有apache2handler已经开启的模块,如果里面包括"mod_rewrite",则已经支持,不再需要继续设置. 如果没有开启"mod_rewrite&q

VBS+bat后强大的功能

set wshshell=createobject("script.shell") wshshell.run "cmd.exe /c [dos命令]",0,true 这是在vbs中执行dos命令,第一个0代表隐藏运行,相当有用的一个参数 第二个true代表执行完dos命令后再执行下一条vbs代码. 比如移动,删除文件,复制文件夹,修改注册表什么的,最好用dos命令. 各有千秋 但总的说来 BAT的描述能力不及VBS 比如说:延时运行某个程序 vbs代码: wscri

DOS时代就存在,但是在Win32中赋予了更强大的功能

要注意的是这里的插入符或插入光标并不是Windows中另外一个"光标",这里是指示插入字符的位置,而不是用于鼠标,手写输入等可以定位.移动的光标(Cursor),而是插入符Caret,本文也成为插入光标,注意插入二字,为了方便,以下在本文中也简称为光标或插入符,但要注意此光标非彼光标. 为什么会有插入光标(插入符)?了解了这个基本问题,就成功了一半了.我们知道计算机可以通过键盘来输入各种字符和控制符,那么自然就存在一个问题,输入的字符应该放到屏幕的什么位置?这个就是光标产生的原因,光标

DataTable.Compute强大的功能

作用:          计算用来传递筛选条件的当前行上的给定表达式. 格式為:          Object Compute (string expression,string filter) 参数:          expression:要计算的表达式. expression 参数需要聚合函数.          filter:要限制在表达式中进行计算的行的筛选器. 如:"Menu_ID=5" //表示Menu_ID為5的行返回值:          為Object型,为计算结

Linux 中 vi / vim 编辑器的简单介绍后续增加强大的功能

vi/vim编辑器 一般模式:光标移动,复制整行粘贴行,搜索替换,删除字符,删除列等 移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键(→) 光标向右移动一个字符 如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标. 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓&

设计师眼中功能强大的Xcode

作为设计师,不仅要能创造出移动为先的新产品,更要了解能创造出优秀移动作品的工具.这个实现过程可以让我们的设计更加优秀. 过去两个月,我每天在 Xcode 上花费的时间大约有 10 个小时,我学到了很多完全改变我的工作流程的技术.Xcode 是一款成熟的工具包含了很多强有力的但没被经常使用的功能.如果你不确定 Storeboard 是 CSS 的未来,或者没有直接使用 Xcode 工作,这篇文章至少会告诉你 Xcode 如何为你的设计做准备和它有什么可能的限制. 预览你的设计 如同你跨多分辨率设备

Django之强大的Form功能

转载: http://www.cnblogs.com/0820-zq/p/5807980.html Form Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息. Django的Form验证实例: 创建project,进行基础配置文件配置 settings.py settings.py之csrf注销 __init__.py urls.py views.account.py: from django.shortcuts import rende

FM收音机 RDS的强大功能

FM收音机 RDS的强大功能 分类: MTK2011-04-26 16:06 14889人阅读 评论(6) 收藏 举报 交通公告体育音乐娱乐教育 前言 随着发展,会有越来越多的电台具有RDS广播功能,RDS可以显示电台名称.节目类型.节目内容.日期时间及其它信息,而它具有的AF和TA功能,则更强大. 通常一个广播电台想扩大它的覆盖率,可能会进行多个频率点的发射,比如某个电台有87.8和95.8MHZ两个频点,当你开着车听着87.8,去到某个地方时,信号变差了, 这时候,开了AF功能,AF功能会自