原文发布时间为: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. 七、Shell printf 命令

    Shell printf 命令 上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf. printf 命令模仿 C 程序库(library) ...

  2. 【JAVA】cxf使用springboot与xml配置的差别所导致的问题。

    使用xml时使用以下配置使报文没有加上命名空间时也能正常访问接口.bean定义的前后顺序不影响程序正常注册对象. <!-- 通过Spring创建数据绑定的类 --> <bean id ...

  3. java中的访问修饰符 (2013-10-11-163 写的日志迁移

    访问级别                 修饰符                    同类                    同包              子类                 ...

  4. JZOJ 4757. 树上摩托

    Description Sherco是一位经验丰富的魔♂法师.Sherco在第零次圣杯战争中取得了胜利,并取得了王之宝藏——王の树.他想把这棵树砍去任意条边,拆成若干棵新树,并装饰在他的摩托上,让他的 ...

  5. 简单聊聊四层/七层模型到HTTP

    本文内容借鉴这篇博客:https://blog.csdn.net/agzhchren/article/details/79173491 但是这篇博客也是该博主转载的,文章具体出处我没有找到,如果有人知 ...

  6. js中正则表达式与Python中正则表达式的区别

    今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...

  7. linux下安装VMware出错:Gtk-Message: Failed to load module "canberra-gtk-module"解决方法

    最近又有兴趣在linux下搭建个虚拟机,于是去找了个VMWorkstation,安装的过程中报了两个错误 Gtk-Message: Failed to load module "pk-gtk ...

  8. hdu 1257最少拦截系统

    最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的 ...

  9. IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习

    2019年2月IT帮线下活动[定义工作,解读自我] 昨天的活动收获很大,全面的总结周老师会另写一篇来帮助大家回顾.我想说一下其中最打动我的一句话:“只有你能决定你有多优秀!” “工作中把自己当成企业家 ...

  10. 使用vue+webpack的多页面架构(转+自己的情况)

    按以下步骤可正常配置多页面架构 记得安装 node-glob   安装命令:npm install node-glob --save-dev 文件附加 webpack.base.conf.js --参 ...