By Peter A. Bromberg, Ph.D.

在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为。以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cache.Insert 并提供引用文件的 CacheDependency 对象添加的

Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));

但是当我们想让缓存根据数据库中表的变化而失效并重建该缓存的时候,应该怎么做呢 – 这种情景在很多应用程序中都存在。Asp.net没有为监视数据库表的变化提供内在的直接缓存支持。利用SQL Server的不常用的系统存储过程sp_makewebtask ,是可以达到这个目的的,这个存储过程本来是用作从查询中生成web页面的,但是我们只要稍作修改- 在触发器中使用它,我们就可以取得一个合理有效的途径,当数据库某张表的记录被更新,删除或者修改时来修改某个特定的文件, 这样会使在CacheDependency实例中的文件监视进程侦测到文件的变化,从而使缓存失效。事实上,因为CacheDependency 类工作在UNC文件协议上,我们可以在整个Web Farm上部署这个解决方案,Web Farm上每台机器上的应用程序副本都会通过UNC文件路径来监视WebFarm中某台单个机器上的同一个文件

废话少说,让我们创建一个简单的web应用程序,来演示它是如果工作的。首先,我们将会使用我们SQL Server中都信赖的Northwind范例数据库。创建一个简单的DataGrid来显示Employees表中的记录. 我们要做的第一件事情就是创建触发器。

CREATE TRIGGER WriteCacheDepFile ON [dbo].[Employees]

FOR INSERT, UPDATE, DELETE

AS

EXEC sp_makewebtask '\\peter\C$\Cache\mycache.txt', 'SELECT top 1 FirstName FROM employees'

以上存储过程就是简单的告诉SQL Server,如果Employee表发生任何变动,就根据一个简单的查询来更新”mycache.txt”文件,有这个简单的查询语句其实足够了,只要它是一个有效的T-SQL语句,SQL Server会很乐意的去更新那个文件。

接下来,我们需要创建一个目录,并设为共享。你可能要更新该文件的访问权限,以使它可以被写入,注意,我这里使用的是管理员共享”C$”.另外,你还需要创建一个空的文本文件,"mycache.txt".

好,现在可以创建我们的应用程序了。首先,在web.config文件中输入依赖文件名称,这样做可以使我们在修改依赖文件的时候不需要重新部署应用程序。

在web.config文件的根部,添加appSettings配置节:

</system.web>

<appSettings>

<!—缓存依赖文件路径 -->

<add key="dependencyFile" value="\\peter\Cache\mycache.txt" />

</appSettings>

</configuration>

现在,让我们在Global类中建立缓存机制,这样我们不需要在任何页面中编写特定的代码

[C#]

public class Global : System.Web.HttpApplication

{

Cache _cache =null;

public static bool blnReflash = false;

public const string ConnStr = "server=localhost;database=Northwind;uid=sa;pwd=";

public const string strSQL = "SELECT EmployeeID, lastname, firstname FROM Employees";

protected void Application_Start(Object sender, EventArgs e)

{

_cache = Context.Cache;

RefreshCahe(null,null,0);

}

protected void Session_Start(Object sender, EventArgs e)

{

if(HttpContext.Current.Cache["Employees"]==null)

RefreshCache(null,null,0);

}

static void RefreshCache(string key,object item,CacheItemRemoveReason reason)

{

SqlDataAdapter adapter = new SqlDataAdapter(strSQL,ConnStr);

DataSet ds = new DataSet();

adapter.Fill(ds,"Employees");

CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RefreshCache);

}

转载于:https://www.cnblogs.com/ranran/p/4036422.html

ASP.NET 数据库缓存依赖相关推荐

  1. .NET 数据库缓存依赖策略实现

    处理大型门户网站 一般都需要 使用缓存技术这个web加速器 在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windo ...

  2. System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...

  3. SQL server数据缓存依赖

    为什么80%的码农都做不了架构师?>>>    SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/ ...

  4. yii2 数据库缓存

    本文使用yii2数据库缓存依赖,主要解决一次查询表多次利用,减少对数据表的查询,把数据查出来的值保存在缓存中. 本文使用标准文件存储缓存数据 使用 DbDependency 数据库缓存依赖 /*** ...

  5. ASP.NET状缓存Cache的应用-提高数据库读取速度

    ASP.NET状缓存Cache的应用-提高数据库读取速度 原文:ASP.NET状缓存Cache的应用-提高数据库读取速度 一. Cache概述        既然缓存中的数据其实是来自数据库的,那么缓 ...

  6. 【状态保持】Cache 基于SQL 数据库 的缓存依赖 轮询机制详解

    首先声明一下如果您还不了解什么是Cache(缓存)请您先搜一下有关信息然后再看这篇文章. 当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过两种途径获 ...

  7. SQL Server SqlCacheDependency 缓存依赖

     SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持 主要包含以下几步:  1. ...

  8. asp.net中缓存的使用介绍一

    介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管理,有的提到的cache管理,这里我比较喜欢cac ...

  9. ASP.NET MVC:缓存功能的设计及问题

    ASP.NET MVC:缓存功能的设计及问题 这是非常详尽的asp.net mvc中的outputcache 的使用文章. [原文:陈希章 http://www.cnblogs.com/chenxiz ...

最新文章

  1. 依赖包 全局_composer 更新指定的依赖包
  2. 【IM】关于迁移学习的理解
  3. 已知项目有风险,作为项目经理接还是不接?
  4. 分享一个关于Java调用百度、高德API、ArcGIS地图获取逆地理的代码
  5. TCP的可靠传输実现
  6. son-server模拟http mock数据
  7. ad20导出bom没有Value属性
  8. Oracle 与 MySql 区别
  9. 在某网课学习前端笔记整理js篇31-ajax
  10. 考上985的研究生了!
  11. html设置鼠标指针的形状,CSS - 鼠标指针样式详解(cursor光标样式、自定义指针图片)...
  12. python函数长度单位换算_长度单位换算表-在线长度单位转换器
  13. 谈谈多年的创业之路和网络生涯
  14. 计算机带不动移动硬盘,我笔记本的USB带不动移动硬盘,但另外一台电脑又可以,同样的盘盒,换一块硬盘又可以,...
  15. uva10827-Maximum sum on a torus(矩阵最大和的变形)
  16. 计算机专业银行春招,哪些银行有春招
  17. matlab皮肤色号检测,彩色图像中的人脸(肤色)检测
  18. 上海Oracle用户组我的页面
  19. 查看域名是否支持IPv6
  20. log4cpp初入门

热门文章

  1. apache实验报告 linux_Linux实验报告
  2. UVA 10410——Tree Reconstruction
  3. mac给服务器传送文件
  4. java经典设计模式4,JAVA设计模式(4) 之装饰设计模式
  5. Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
  6. 10-排序4 统计工龄 (20 分)
  7. 【Leetcode | 42】129. 求根到叶子节点数字之和
  8. NuGet 无法连接到远程服务器-解决方法(转)
  9. flask第一章:项目环境搭建
  10. 【JavaScript】网站源码防止被人另存为