本文主要是为了了解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;}Index @{ Response.Write(DateTime.Now.ToString());}
3、配置web.config文件,主要是<system.web>节点下的<caching>节点的配置,代码如下
关于<sqlCacheDependency>的属性,在此我就不详细介绍了,相关资料大家查阅一下就可以。
4、SQLSERVER2008的数据缓存依赖的功能配置。
检查 Service Broker是否开启:Select DATABASEpRoPERTYEX('test','IsBrokerEnabled') 如果为1表示成功,0表示未成功。
如未开启执行
ALTER DATABASE test SETENABLE_BROKERGO
为sql缓存依赖启用某表,也就是指定哪张表的数据有变化时候,会更新缓存信息。主要用到asp.net_regsql.exe,该文件存放于C:\Windows\Microsoft.NET\Framework\v4.0.30319 。
用法:打开命令提示工具,进入到asp.net_regsql.exe的所在目录,执行命令
aspnet_regsql.exe -S-U -P -ed -d -et -t 将其中<>中替换成你自己测试时候的参数。我测试时候执行的命令如下:
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 = 900, SqlDependency = "test:YH")] public ActionResult Index() { return View(); } }}
经过以上的步骤,整个功能准备已经结束,运行程序,下面看下效果。初次加载呈现的页面就是如下时间,再刷新后,时间依然如下显示,证明程序的缓存功能生效了。那么,是否是在被设置成依赖的表数据修改完成,缓存会被重置呢?
接下来,我在数据库的表中随便修改下表的数据后,立刻刷新页面,看下,时间变了,那么在继续刷新页面,看时间还是如下图的时间,也就是修改完数据表的值,缓存立刻也被更新了。
自己可以照着测试下吧。