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:WindowsMicrosoft.NETFrameworkv4.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();
        }

    }
}

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

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

    自己可以照着测试下吧。

原文地址:https://www.cnblogs.com/Y-X-DONG/p/4635160.html