原文:ASP.NET MVC 实现与SQLSERVER的依赖缓存

本文主要是为了了解ASP.NET MVC 实现与SQLSERVER的依赖缓存的功能,针对自己对于这方面知识的学习的过程的一个记录。由于本人也是初次了解这个知识点,有哪些错误,还望高手不吝赐教哦。好,下面正式进入话题。

1、测试的环境及工具: vs2012 sqlserver2008r2

2、测试目的:当数据库的值有变化时候,页面的缓存也会及时更新。

具体步骤:

1、在VS2012中新建一个ASP.NET MVC 的空的项目。

2、新建一个HomeController ,并创建Index试图。代码很简单,如下

 public class HomeController : Controller
{ public ActionResult Index()
{
return View();
} }

视图代码很简单,就是输出系统当前的时间,以便测试中能很清晰的判断出访问当前页面时候,是缓存的数据,还是从服务器最新返回的数据。

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Index</title>
</head>
<body>
<div>
@{ Response.Write(DateTime.Now.ToString());}
</div>
</body>
</html>

3、配置web.config文件,主要是<system.web>节点下的<caching>节点的配置,代码如下

<connectionStrings>

    <add name="TestConnectionString" connectionString="Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=sasa" />

</connectionStrings>
<caching>
<sqlCacheDependency enabled="true" pollTime="2000">
<databases>
<add name = "test"
connectionStringName = "TestConnectionString"/>
</databases>
</sqlCacheDependency>
</caching>

关于<sqlCacheDependency>的属性,在此我就不详细介绍了,相关资料大家查阅一下就可以。

4、SQLSERVER2008的数据缓存依赖的功能配置。

检查 Service Broker是否开启:Select DATABASEpRoPERTYEX('test','IsBrokerEnabled')   如果为1表示成功,0表示未成功。

如未开启执行

ALTER DATABASE test SET
ENABLE_BROKER
GO

为sql缓存依赖启用某表,也就是指定哪张表的数据有变化时候,会更新缓存信息。主要用到asp.net_regsql.exe,该文件存放于C:\Windows\Microsoft.NET\Framework\v4.0.30319 。

用法:打开命令提示工具,进入到asp.net_regsql.exe的所在目录,执行命令

aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d <databaseName> -et -t <tableName>
将其中<>中替换成你自己测试时候的参数。我测试时候执行的命令如下:
aspnet_regsql.exe -S . -U sa -P sasa -ed -d test -et -t yh
成功开启如下图

5、为HomeController的ACTION 添加缓存的策略,很简单就是在某个ACTION上,添加[OutputCache(Duration = 900, SqlDependency = "test:YH")]标记

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
[OutputCache(Duration = , SqlDependency = "test:YH")]
public ActionResult Index()
{
return View();
} }
}

经过以上的步骤,整个功能准备已经结束,运行程序,下面看下效果。初次加载呈现的页面就是如下时间,再刷新后,时间依然如下显示,证明程序的缓存功能生效了。那么,是否是在被设置成依赖的表数据修改完成,缓存会被重置呢?

接下来,我在数据库的表中随便修改下表的数据后,立刻刷新页面,看下,时间变了,那么在继续刷新页面,看时间还是如下图的时间,也就是修改完数据表的值,缓存立刻也被更新了。

自己可以照着测试下吧。

ASP.NET MVC 实现与SQLSERVER的依赖缓存的更多相关文章

  1. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  2. [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject

    本人博客已转移至:http://www.exblr.com/liam  为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...

  3. Asp.net MVC 中使用 Ninject 实现依赖注入

    松耦合.针对抽象编程.不针对实现编程是面向对象设计的原则.依赖注入就是,在一个类的内部,不通过创建对象的实例而能够获得实现了某个公开接口的对象引用.所谓的控制反转也是相同的意思.把依赖的创建转移到了使 ...

  4. ASP.NET MVC 监控诊断、本地化和缓存

    这篇博客主要是针对asp.net mvc项目的一些常用的东东做一个讲解,他们分别是监控诊断.本地化和缓存.虽然前两者跟asp.net mvc看上去好像是没什么关联. 但其实如果真正需要做asp.net ...

  5. [转]Asp.net mvc 网站之速度优化 -- 页面缓存

    网站速度优化的一般方法 由于网站最重要的用户体验就是速度,特别是对于电子商务网站而言. 一般网站速度优化会涉及到几个方面: 1. 数据库优化 — 查询字段简历索引,使用数据库连接池和持久化,现在还有种 ...

  6. Asp.net mvc 网站之速度优化 -- 页面缓存

    网站速度优化的一般方法 由于网站最重要的用户体验就是速度,特别是对于电子商务网站而言. 一般网站速度优化会涉及到几个方面: 1. 数据库优化 — 查询字段简历索引,使用数据库连接池和持久化,现在还有种 ...

  7. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

  8. 【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject

    本文参考:http://www.cnblogs.com/willick/p/3223042.html 1.Ninject是一款轻量级的DI工具,可通过VS的插件NuGet将其引用到项目中. 2.使用N ...

  9. 【ASP.NET MVC 学习笔记】- 04 依赖注入(DI)

    本文参考:http://www.cnblogs.com/willick/p/3223042.html 1.在一个类内部,不通过创建对象的实例而能够获得某个实现了公开接口的对象的引用.这种"需 ...

随机推荐

  1. 南阳理工ACM-OJ 分数加减法 最大公约数的使用

    http://acm.nyist.net/JudgeOnline/problem.php?pid=111 简单模拟: #include <iostream> #include <st ...

  2. 设计模式21---设计模式之享元模式(Flyweight)(结构型)

    1.讲解享元模式(结构型) 1.1享元模式定义 运用共享技术有效地支持大量细粒度对象. 享元:把内部状态共享出来 1.2享元模式要点 重点在于分离变与不变. 把一个对象的状态分为内部状态和外部状态,内 ...

  3. 最蛋疼的bug:读取图片缩略图(一定要在相冊查看下形成缓存)

    近期的一个连接服务端的应用.须要读取图片,一般供用户公布商品选择上传图片.初始的图片列表应该是缩略图.仅仅有确定了,才上传原图,OK不多说上代码 package edu.buaa.erhuo; imp ...

  4. 【AIX】采用vi语法编辑命令行

    AIX中不能像centos那样移动方向键上.下来查询历史键入的命令行记录 可以通过一条命令采用vim的语法编辑命令行,查询历史记录. # set -o vi 在命令行输入上述命令后就可以: ESC+k ...

  5. NSPredicate查询日期的问题

    查询日期的时候日期可以根据参数传进去,但不能在字符串中传参后在作为查询条件 简单比较以下两段代码 NSDate* date1=[NSDate date]; NSDate* date2=date1; r ...

  6. 构建服务端的AMD/CMD模块加载器

    本文原文地址:http://trock.lofter.com/post/117023_1208040 . 引言:  在前端开发领域,相信大家对AMD/CMD规范一定不会陌生,尤其对requireJS. ...

  7. 对话框 自定义 IOS风格 包青天

    activity     private void showDialog1() {         message = "您输入的邮箱后缀不是公司邮箱地址\n将导致您的借款审核不通过,请重新 ...

  8. 数据库 ORM框架 ORMLite

    几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...

  9. codevs 1128 导弹拦截 (贪心)

    /* 题目大体意思是两套系统好多导弹 怎样分配使得两个系统所拦截的最大半径之和最小 贪心:把距离1系统最远的 让2拦截 记好距离 然后按照距离1由远到近排序 对于每一个导弹 如果这之前的都给2拦截 则 ...

  10. display:inline、block、inline-block的区别(转)

    display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...