原文发布时间为: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 博大精深,看来好多东西,都是“越学越浅”的。

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

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

    创建文档类型声明 一般而言,XML声明放在文档顶部.在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号.查看程序清单A: 程序清单 A <?php// create do ...

  2. 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构

    1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...

  3. 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率

    原文:通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率 使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板 ...

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

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法!对初学者很有用的哦! 1.检测Apache是否支持mod_rewrite 通过php提供的p ...

  5. VS中一个强大的功能,将Json或者XML黏贴为类

    有时候需要传递json,或者是json结构复杂,看的杂乱无章,我们可以将这个json复制下来,然后将它写成类的形式,VS中已经帮我们很好的实现了这个功能,我们只需要选择   编辑===>> ...

  6. VBS+bat后强大的功能

    set wshshell=createobject("script.shell") wshshell.run "cmd.exe /c [dos命令]",0,tr ...

  7. 转:IOS的推送。是一个强大的功能

    IOS下我们很多人天天开着 邮件推送 微信推送 QQ推送 微博推送 新浪微博推送,安卓敢吗? 五个后台进程消耗电.流量谁敢这么做?现在安卓也出了推送,但绝对是伪推送.实际是挂了个进程,关掉了就收不到. ...

  8. Chrome的强大搜索功能

    前言 前几天一个好朋友求助我,大概问题是他的电脑QQ啥都能上网,就浏览器上不了网不是IE而是chrome,我第一反应可能是dns问题.后来发甩过来一张图,好家伙把我吓得,类似于下面这张图 这图是我自己 ...

  9. 【flex弹性盒布局】------这个强大的功能

    你知道flex弹性布局么? 我们先来了解它的概念:Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局 ...

随机推荐

  1. C/C++程序基础 (四)字符串

    字符串与数字转化 数字转换字符串:itoa, ltoa, ultoa ; gcvt, ecvt, fcvt 字符串转数字:atoi, atof(双精度浮点), atol:strtod(双精度浮点), ...

  2. restful api 规范

  3. 51nod 1105 二分答案法标准题目

    二分答案法例题,用于练习二分答案的基本思想非常合适,包括了思维方式转换的内容(以前我们所做的一直是利用二分法求得数组元素对应指针之类,但是现在是直接对答案进行枚举). 思路是:首先对输入数组进行排序, ...

  4. Diycode开源项目 TopicContentActivity分析

    1.效果预览以及布局分析 1.1.实际效果预览 左侧话题列表的布局是通过TopicProvider来实现的,所以当初分析话题列表就没有看到布局. 这里的话题内容不是一个ListView,故要自己布局. ...

  5. OpenCV学习笔记(十) 直方图操作

    直方图计算 直方图可以统计的不仅仅是颜色灰度, 它可以统计任何图像特征 (如 梯度, 方向等等).直方图的一些具体细节: dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅 ...

  6. CA证书申请、认证原理

    (一) 证书的申请 密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式,PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件,直接打 ...

  7. 48、android代码架构总结

    之前是按功能模块进行分类,现在随着功能模块越来越多,代码层次不再清晰,所以修改了工程结构: 之前: 经过修改现在: 1.更严谨的遵循mvc架构 bean目录存放的是数据模型 ui存储的是activit ...

  8. MFC定时关机程序的实现3-最小化到托盘栏

    这个定时关机运行过后默认最小化到托盘栏最好了,不用每次都去点了. 现在来看看如何将程序显示在托盘栏. 首先在头文件里声明一个变量和一个消息响应函数 //最小化到托盘栏 //第一步,生成一个成员变量,或 ...

  9. C++ STL map容器的说明测试1

    // maptest.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" /*********************************** ...

  10. uReplicator实现分析

    MirrorMakerWorker分析 是整个同步机制的主入口,主要组织的逻辑有: 配置数据的传入与处理,ConsumerConfig对象的构建 度量对象的准备,定时上报的度量数据收集线程的定义与启动 ...