.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: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技术,分布式缓存服务器.

转载于:https://www.cnblogs.com/ajunForNet/p/4332257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据面临的挑战:当大数据遭遇云计算

本文讲的是大数据面临的挑战&#xff1a;当大数据遭遇云计算,大数据正在彻底改变IT世界。那么&#xff0c;什么样的数据谈得上数据呢? 根据IDC的报告&#xff0c;未来十年全球大数据将增加50倍。仅在2011年&#xff0c;我们就将看到1.8ZB(也就是1.8万亿GB)的大数据创建产生。这…

Climbing Stairs - Print Path

stair climbing&#xff0c; print out all of possible solutions of the methods to climb a stars, you are allowed climb one or two steps for each time; what is time/space complexity? &#xff08;use recursion&#xff09; 这道题难是难在这个ArrayList<Strin…

java 单例设计_Java 之单例设计模式

设计模式: 对问题行之有效的解决方式, 其实它是一种思想.单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性. 即单个实例.比如对于A 和 B 两个程序使用同一个配置信息对象时, A 对配置信息作出修改, B 也与之对应的更新配置信息, 即需要保证该对象的唯一性.如何保…

Javascript之RegExp

RegExp对象的构造器 new RegExp(pattern[, flags]) pattern 正则表达式文本flags 该参数可以是下面几个值的任意组合&#xff1a;g 全局匹配i 忽略大小写m 让开始和结束字符&#xff08;^ 和 $&#xff09;工作在多行模式&#xff08;也就是&#xff0c;^ 和 $ 可以匹配字符串中…

DS汽车通过采用沉浸式虚拟现实技术实现展厅转型

PSA集团&#xff08;PSA Group&#xff09;旗下的高端品牌DS汽车公司&#xff08;DS Automobiles&#xff09;采用达索系统的“虚拟车库&#xff08;Virtual Garage&#xff09;”行业解决方案为全新的SUV车型DS 7 CROSSBACK提供全面支持&#xff0c;推动其展厅转型&#xff0c…

java 日历记事本_calendar 一个用java编写的日历记事本. 具有正常日历功能;也可以用于在不同日期记录下当日重要的事情 - 下载 - 搜珍网...

日历记事本/日历记事本/build/classes/日历记事本/CalendarPad$1.class日历记事本/日历记事本/build/classes/日历记事本/CalendarPad.class日历记事本/日历记事本/build/classes/日历记事本/Month.class日历记事本/日历记事本/build/classes/日历记事本/NotePad.class日历记事…

要的需求 ip提取网站源码带采集 要求是PHP源码

求。ip提取网站源码带采集 要求是PHP源码。必须带采集类似 小峰IP提取网站&#xff0c;安小莫IP提取&#xff0c;迷惘IP提取&#xff0c;冰封IP提取免费类型的 不要淘宝类型的 200 转载于:https://www.cnblogs.com/PS-apple/p/4342866.html

设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问。从而方便对实例个数的控制并节约系统资源。假设希望在系统中某个类的对象仅仅能存…

java 跳转action_JS 跳转到指定Action | 学步园

最近项目需要在JS中跳转到指定的Action。通过不断的实验和查资料&#xff0c;终于成功。Java SSH2 架构下&#xff0c;正常 配置Action完毕。在xxx.jsp下window.location" ";例如&#xff1a;window.location" /user/ResAction> ";其中ResAction是配置文…

【转】康拓展开

———本文转自&#xff1a;http://www.cnblogs.com/1-2-3/archive/2011/04/25/generate-permutation-part2.html 1、康托展开  康托展开的公式是 Xan*(n-1)!an-1*(n-2)!...ai*(i-1)!...a2*1!a1*0! 其中&#xff0c;ai为当前未出现的元素中是排在第几个&#xff08;从0开始&a…

java类排序

1、实现Comparator接口 public static class ComparatorImpl implements Comparator<Element>{Overridepublic int compare(Element o1, Element o2) {if(o1.unitPrice > o2.unitPrice)return 1;else if(o1.unitPrice < o2.unitPrice){return -1;}else{return 0;}}…

java jni so_java 用jni调用so全过程

这几天一直在研究JNI的开发过程&#xff0c;顺便把NDK环境搭建一起总结下。在windows环境下开发jni需要c/c编译器的支持&#xff0c;网络上我看很多人使用cygwin。呵呵我不是很喜欢使用它&#xff0c;感觉安装起来挺麻烦的。我使用GNUStep&#xff0c;下载地址http://www.gnust…

ios开发之 -- 自动轮播图创建

这里是oc版本的&#xff0c;简单记录下&#xff1a; 具体代码如下&#xff1a; 1&#xff0c;准备 #define FRAME [[UIScreen mainScreen] bounds] #define WIDTH FRAME.size.width #define HEIGHT FRAME.size.height 2&#xff0c;具体实现 //scrollview的添加_bigScrollView…

学习进度(2016.3.13)

第二周所花时间&#xff08;包括上课&#xff09;14小时代码量&#xff08;行&#xff09;138行博客量&#xff08;篇&#xff09;4篇了解到的知识点动态数组的定义初始化和使用&#xff0c;指定范围获得随机数转载于:https://www.cnblogs.com/zzcs/p/5272365.html

binaryoperator java_BinaryOperatorT接口的用法示例

java Function函数中的BinaryOperator接口用于执行lambda表达式并返回一个T类型的返回值&#xff0c;下面的BinaryOperator用法示例让你简单了解一下。import java.util.function.BinaryOperator;public class TestDemo {public static void main(String[] args) {BinaryOperat…

线性表的顺序存储结构之顺序表类的实现_Java

在上一篇博文——线性表接口的实现_Java中&#xff0c;我们实现了线性表的接口&#xff0c;今天让我们来实现线性表的顺序存储结构——顺序表类。 首先让我们来看下顺序表的定义&#xff1a; 线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素&#xff0c;元素在…

Linux下安装jdk

参考于&#xff1a;http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html 一、准备阶段 ①下载jdk-6u45-linux-i586.bin&#xff0c;通过xftp上传至Linux系统中 ②在命令行执行 ./jdk-6u45-linux-i586.bin&#xff0c;生成目录jdk1.6.0_45 ③移动到/usr/share下&…

JDK source 之 ArrayList 需要注意事项

线程安全 ArrayList内部没有实现原子性操作&#xff0c;所以是非线程安全的。如果需要在线程安全的环境下使用List的话&#xff0c;需要使用Vector 或者CopyOnWriteArrayList&#xff0c;具体场景&#xff0c;自行深入了解。 扩容算法 // minCapacity 为需要的最小容量 private…

为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件

http://blog.csdn.net/morixinguan/article/details/77808088 上节&#xff0c;我们明白了proc文件系统的作用&#xff0c;接下来我们在友善之臂已经写好的led驱动的基础上&#xff0c;在proc目录下创建一个文件夹&#xff0c;然后加入led驱动的版本信息读取。 我们在init函数的…

java audiorecord_Android 录音实现(AudioRecord)

上一篇文章介绍了使用 MediaRecorder 实现录音功能 Android录音实现(MediaRecorder) &#xff0c;下面我们继续看看使用 AudioRecord 实现录音功能。AudioRecord首先看看Android帮助文档中对该类的简单概述: AndioRecord 类的主要功能是让各种 Java 应用能够管理音频资源&#…