本文主要是为了了解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 = 900, SqlDependency = "test:YH")] public ActionResult Index() { return View(); } } }
经过以上的步骤,整个功能准备已经结束,运行程序,下面看下效果。初次加载呈现的页面就是如下时间,再刷新后,时间依然如下显示,证明程序的缓存功能生效了。那么,是否是在被设置成依赖的表数据修改完成,缓存会被重置呢?
接下来,我在数据库的表中随便修改下表的数据后,立刻刷新页面,看下,时间变了,那么在继续刷新页面,看时间还是如下图的时间,也就是修改完数据表的值,缓存立刻也被更新了。
自己可以照着测试下吧。