.NET 数据库缓存依赖策略实现
2015-03-12 14:07
288 查看
处理大型门户网站 一般都需要 使用缓存技术这个web加速器
在 PHP 和 java 一般 使用的是 基于squid 来做.
当然在 windows .NET 平台也是可以的 squid有 windows版本.
这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它;
一、基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口)。
二、基于文件依赖的策略(可以设置缓存依赖于文件中的具体键值,当数据更新时,更新文件键值迫使缓存失效)。
然后 然后 前面两种 当然 和 页面缓存不同. 页面缓存 可能呈现的是已经过期的内容. 而缓存策略轮询 基本上都是 最新的内容.
下面我们来一步步的实现这个过程吧:
首先 命令 cmd
打开DOS 界面
?
注意:这里是系统安装路径.
然后 这里我们给数据库fjmr_db设置缓存策略依赖.
?
然后 这里我们对表N_News注入依赖(当表N_News有增删改操作 就缓存失效)
?
然后 在web.config下 配置 缓存策略节点
配置好轮询SQL缓存依赖后,就能对页面输出缓存使用SQL依赖了。
下面是页面缓存失效时间 9999秒! ,也就是说数据库没有更新的话9999秒都不会读库.
当然如果数据库N_News如果更新了.那么页面就马上会刷新了!
如果希望让一个页面依赖多个数据库表,则需要将sqlDependecy特性设置为一组用分号分隔的数据库和数据库表名的列表。
如 :fjmr_db:N_News;fjmr_db:其他表
也可以在一个用户控件中使用<%@ OutputCache %> 指令来使用轮询SQL缓存依赖。
也就是说,可以使用轮询SQL缓存依赖来实现部分页面缓存。
要对SqlDataSource和ObjectDataSource控件使用轮询SQL缓存依赖,只需要设置sqlCache- Dependency属性。
数据库名必须与配置在Web配置文件<sqlCacheDependency>元素中的数据库名相对应!
我们也可以对Cache对象使用轮询SQL缓存依赖,用SqlCacheDependency对象来代表一个轮询SQL缓存依赖。
当DataTable添加到Cache时,该类就用作Cache.Insert()的一个参数。
如果需要创建多个数据库表的依赖,
则需要创建多个SqlCacheDependency对象并用Aggregate- CacheDependency类的实例表示多个依赖。
最后 这种缓存策略只适用于一般 中小型的 缓存加速. 如果对大型系统 做的话 很多时候是用到了 NoSQL技术,分布式缓存服务器.
在 PHP 和 java 一般 使用的是 基于squid 来做.
当然在 windows .NET 平台也是可以的 squid有 windows版本.
这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它;
一、基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口)。
二、基于文件依赖的策略(可以设置缓存依赖于文件中的具体键值,当数据更新时,更新文件键值迫使缓存失效)。
然后 然后 前面两种 当然 和 页面缓存不同. 页面缓存 可能呈现的是已经过期的内容. 而缓存策略轮询 基本上都是 最新的内容.
下面我们来一步步的实现这个过程吧:
首先 命令 cmd
打开DOS 界面
?
然后 这里我们给数据库fjmr_db设置缓存策略依赖.
?
?
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:SqlDataSource id="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技术,分布式缓存服务器.
相关文章推荐
- ASP.NET 2.0实现依赖Oracle的缓存策略
- SQL Server 2005实现数据库缓存依赖
- 不使用数据库缓存依赖项实现同样的功能
- ASP.NET 2.0实现依赖Oracle的缓存策略
- SqlDependency建立数据库表依赖实现自动刷新缓存
- 不使用数据库缓存依赖项实现同样的功能[转]
- asp.net 实现文件缓存依赖,数据库缓存依赖
- asp.net 实现文件缓存依赖,数据库缓存依赖
- ASP.NET MVC 数据库依赖缓存的实现
- ASP.NET2.0结合aspnet_regsql实现数据库的缓存依赖
- ASP.NET Cache 实现依赖Oracle的缓存策略
- .net 缓存之数据库缓存依赖
- 一起谈.NET技术,ASP.NET缓存全解析6:数据库缓存依赖
- ASP.NET 2.0实现依赖Oracle的缓存策略
- asp.net 实现文件缓存依赖,数据库缓存依赖
- 基于微软解决方案的负载测试实现-知识库1____(转)理解.NET中的数据库连接池
- 基于.NET平台的分层架构实战(六)——依赖注入机制及IoC的设计与实现
- 在SQL Server2000里怎样实现缓存依赖功能
- ASP.NET数据库缓存依赖
- (转)在.net中如何利用数据工厂实现多数据库的操作