.NET 数据库缓存依赖策略实现

处理大型门户网站 一般都需要 使用缓存技术这个web加速器
在 PHP 和 java 一般 使用的是 基于squid 来做.
当然在 windows .NET 平台也是可以的 squid有 windows版本.
这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它;
  一、基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口)。
  二、基于文件依赖的策略(可以设置缓存依赖于文件中的具体键值,当数据更新时,更新文件键值迫使缓存失效)。

然后 然后

  前面两种 当然 和 页面缓存不同. 页面缓存 可能呈现的是已经过期的内容. 而缓存策略轮询 基本上都是 最新的内容.

  下面我们来一步步的实现这个过程吧:
    首先 命令 cmd

    打开DOS 界面

?

cd D:\Windows\Microsoft.NET\Framework\v2.0.50727

  注意:这里是系统安装路径.

  然后  这里我们给数据库fjmr_db设置缓存策略依赖.

?

aspnet_regsql -C "Data Source=.\SQLSERVER05;Integrated Security=True;Initial Catalog=fjmr_DB" -ed  

  然后 这里我们对表N_News注入依赖(当表N_News有增删改操作 就缓存失效)

?

aspnet_regsql -C "Data Source=localhost;Integrated Security=True;Initial Catalog=fjmr_DB" -et -t N_News

然后 在web.config下 配置 缓存策略节点

 1     <caching> 2       <!-- 设置数据库 缓存依赖策略 轮询时间 ms 是否启用--> 3       <sqlCacheDependency pollTime="5000" enabled="true"> 4         <databases> 5           <!--数据库名称, 数据库链接, 轮询时间 ms--> 6           <add name="fjmr_db" connectionStringName="数据库链接配置" pollTime="5000"/> 7         </databases> 8       </sqlCacheDependency> 9 10     </caching>

  配置好轮询SQL缓存依赖后,就能对页面输出缓存使用SQL依赖了。
  下面是页面缓存失效时间 9999秒! ,也就是说数据库没有更新的话9999秒都不会读库.
  当然如果数据库N_News如果更新了.那么页面就马上会刷新了!

1 <%@ Page Language="C#" %>2  <%@ OutputCache Duration="9999" VaryByParam="none"3 SqlDependency="fjmr_db:N_News" %>

如果希望让一个页面依赖多个数据库表,则需要将sqlDependecy特性设置为一组用分号分隔的数据库和数据库表名的列表。

如 :fjmr_db:N_News;fjmr_db:其他表

  也可以在一个用户控件中使用<%@ OutputCache %> 指令来使用轮询SQL缓存依赖。
  也就是说,可以使用轮询SQL缓存依赖来实现部分页面缓存。
  要对SqlDataSource和ObjectDataSource控件使用轮询SQL缓存依赖,只需要设置sqlCache- Dependency属性。
  数据库名必须与配置在Web配置文件<sqlCacheDependency>元素中的数据库名相对应!

<asp:SqlDataSourceid="srcNews"ConnectionString="<%$ ConnectionStrings:News %>"SelectCommand="SELECT * FROM N_News"EnableCaching="true"SqlCacheDependency="fjmr_db:N_News"OnSelecting="srcNews_Selecting"Runat="server" />

我们也可以对Cache对象使用轮询SQL缓存依赖,用SqlCacheDependency对象来代表一个轮询SQL缓存依赖。
  当DataTable添加到Cache时,该类就用作Cache.Insert()的一个参数。
  如果需要创建多个数据库表的依赖,
  则需要创建多个SqlCacheDependency对象并用Aggregate- CacheDependency类的实例表示多个依赖。

 1 DataTable news = (DataTable)Cache["_News"]; 2  if (news == null) 3 { 4 news = GetNewsFromDB(); 5 SqlCacheDependency sqlDepend = new  6 SqlCacheDependency("MyDatabase", "_News"); 7 Cache.Insert("_News", news, sqlDepend); 8 } 9 grdNews.DataSource = news;10 grdNews.DataBind();11 }

  最后 这种缓存策略只适用于一般 中小型的 缓存加速. 如果对大型系统 做的话 很多时候是用到了 NoSQL技术,分布式缓存服务器.

时间: 2024-07-31 15:35:16

.NET 数据库缓存依赖策略实现的相关文章

开启SQLSERVER数据库缓存依赖优化网站性能

很多时候,我们服务器的性能瓶颈会是在查询数据库的时候,所以对数据库的缓存非常重要,那么有没有一种方法,可以实现SQL SERVER数据库的缓存,当数据表没有更新时,就从缓存中读取,当有更新的时候,才从数据表中读取呢,答案是肯定的,这样的话我们对一些常用的基础数据表就可以缓存起来,比如做新闻系统的新闻类别等,每次就不需要从数据库中读取了,加快网站的访问速度. 那么如何开启SQLSERVER数据库缓存依赖,方法如下: 第一步:修改Web.Config的<system.web>节的配置,代码如下,让

Asp.net数据库缓存依赖

Asp.net数据库缓存依赖 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致.那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验. 答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency

Yii2.0数据库缓存依赖发布的使用理解

对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候Yii2.0的缓存依赖发布就起到至关重要的作用了!现将主要的使用流程介绍如下: 1.在需要缓存依赖发布的数据表新增一个update_time字段,每次添加.修改记录后都会相应改变update_time的值: 2.保证需要缓存依赖发布的数据表每次保存(包括更新操作)都能更新update_time的值: // 所有表model继承的基础BaseModel.php /** *

使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)

使用 SQL 缓存依赖项 最简单的缓存策略就是使缓存数据在一个指定的时间周期后过期.但是这个简单的方法意味着缓存数据没有保持与底层数据源的联系,从而导致过期数据长时保存或当前数据很快过期.更好的方法是使用 SqlCacheDependency 类,这样数据一直被缓存,直到其底层数据在 SQL 数据库中被修改.本篇教程将讲解怎样使用这个类. Part 1 简介 使用 ObjectDataSource 缓存数据 和在架构中缓存数据 教程中探讨的缓存技术使用基于时间的有效期 , 在指定的周期过后从缓存

c# 数据库缓存依赖

1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4.0.30319):    aspnet_regsql -S .  -U sa -P pwd -ed -d xxx  -et -t xxx; 缓存依赖禁用: aspnet_regsql -S . \ds -E -dd -d XXX -S服务器名称 -E集成身份验证 -U 账号 -P 密码  -ed为

缓存依赖(文件、数据库)

前言 缓存的基本用法介绍:我推荐看下  asp.net缓存 . 本篇,我主要写下一般sql的缓存依赖,还有使用Mvc过滤器的数据库缓存依赖. 什么是缓存依赖 1.缓存:是把你要访问的资源,放在内存中,占用一定的内存空间,从而是用户读取内存中的数据,进而减少读取数据库,或资源文件的次数,从而对你的程序并发量,以及返回请求速率上得到提高的一种机制. 2.缓存的不及时性:由于在缓存的作用时间内,数据放在内存中,不知道数据源是否已经改变,从而是信息失去即时效应. 3.解决不及时性:为啦解决第二条的不及时

System.Web.Caching.Cache类 缓存 各种缓存依赖

System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比. EffectivePrivateBytesLimit 获取可用

System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖

Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比. EffectivePrivateBytesLimit 获取可用于缓存的字节数. Item 获取或设置指定键处的缓存项. 二.方法 方法

System.Web.Caching.Cache类 缓存 各种缓存依赖(转)

转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例.尽量使用前者. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物