Sql缓存依赖

Sql缓存依赖主要分为两种:

1.轮询模式(poll model)

2.推模式(push model)

今天先讲解第一种模式:轮询

要使用sql轮询模式,得做三方面的工作:

1.对数据库启用缓存依赖

2.对一个或多个表启用缓存依赖

3.在web.config中配置应用程序

一.对数据启用缓存依赖

在visual studio command prompt中执行以下命令

aspnet_regsql -C "Data Souce=localhost;Integrated Security=True;Initial Catalog=SqlTest" -ed

注释:aspnet_regsql是命令行工具 本命令表示启用SqlTest数据库缓存依赖

当执行该命令后,将会在数据库SqlTest中创建表:AspNet_SqlCacheTablesForChangeNotification,如图:

tableName:记录被缓存的表

notificationCreated:记录缓存被创建的时间

changeId:计数器,当表数据修改后,自动增加1

同事创建5个存储过程:

AspNet_SqlCachePollingStoredProcedure

AspNet_SqlCacheQueryRegisteredTablesStoredProcedure

AspNet_SqlCacheRegisterTableStoredProcedure

AspNet_SqlCacheUnRegisterTableStoredProcedure

AspNet_SqlCacheUpdateChangeIdStoredProcedure

二.对数据表启用缓存依赖

在visual studio command prompt中执行以下命令

aspnet_regsql -C "Data Souce=localhost;Integrated Security=True;Initial Catalog=Pubs" -et -t Customers

注释:对Customers表启用缓存依赖

当执行该命令后,将在数据库表AspNet_SqlCacheTablesForChangeNotification中添加一条记录,如图:

三.配置应用程序

[html] view plaincopy

  1. <caching>
  2. <sqlCacheDependency enabled="true" pollTime="1000">
  3. <databases>
  4. <add name="mydatabase" connectionStringName="pubsConnectionstring"/>
  5. </databases>
  6. </sqlCacheDependency>
  7. </caching>

注释:pollTime设置为1000ms,意思是应用程序按照1s的频率进行轮询,如果数据库表Customers数据被修改,则缓存在1m内失效,重新加载新的数据,然后缓存,知道数据被再次修改,检测数据库表的变化,connectionStringName被设置为要对哪一个数据库进行轮询的数据库连接字符串

此时已经对sql轮询模式已经设置完毕。

四.验证

1.建立页面default.aspx

2.设置缓存:

[html] view plaincopy

  1. <%@ OutPutCache Duration="20" VaryByParam="none" SqlDependency="mydatabase:Customers" %>

注释:本页面缓存20秒,mydatabase为配置文件中设置sql缓存的项的name值,Customers是要被缓存的表3.页面测试代码如下:

[html] view plaincopy

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head runat="server">
  3. <title></title>
  4. </head>
  5. <body>
  6. <form id="form1" runat="server">
  7. <%= DateTime.Now.ToString("T") %>
  8. <div>
  9. <asp:GridView runat="server" DataSourceID="srcCustomers" />
  10. <asp:SqlDataSource
  11. runat="server"
  12. ID="srcCustomers"
  13. ConnectionString="<%$ ConnectionStrings:SqlTestConnstring %>"
  14. SelectCommand="SELECT * FROM [SqlTest].[dbo].[Customers]" />
  15. </div>
  16. </form>
  17. </body>
  18. </html>

注意:对属性SqlDependency如果要设置多个表的话,形势如下:

SqlDependency="mydatabase:Customers;mydatabase:Products"

3.运行效果

如果在20s内刷新页面,则时间不会改变,20s后时间被更新,现在我们修改下customers的数据,然后刷新页面,效果如下:

时间被修改,页面展示的Tom也被更新为fred,当数据库的数据修改后,缓存将在1s(配置文件中的PollTime值)被失效。

原理解析:轮询Sql缓存依赖是最灵活的Sql缓存依赖类型,所以推荐使用轮询sql缓存依赖。轮询模式使用的是数据库触发器,当表数据被修改时,触发器被触发,则表AspNet_SqlCacheTablesForChangeNotification中的记录ChangeId字段自定加1。

asp.net framework 使用一个后台线程,用来定期轮询数据库表的修改情况,如果有修改,则依赖于数据库表的缓存项目从缓存中移除。应用程序每次在查询数据时现检测表AspNet_SqlCacheTablesForChangeNotification的记录有没有被修改,如果没有修改则使用缓存中的数据,如果被修改则重新获取数据然后放入缓存中。

好了,今天就到这儿哦,如有错误,请指正!

时间: 2024-10-13 11:08:46

Sql缓存依赖的相关文章

使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)

使用 SQL 缓存依赖项 最简单的缓存策略就是使缓存数据在一个指定的时间周期后过期.但是这个简单的方法意味着缓存数据没有保持与底层数据源的联系,从而导致过期数据长时保存或当前数据很快过期.更好的方法是使用 SqlCacheDependency 类,这样数据一直被缓存,直到其底层数据在 SQL 数据库中被修改.本篇教程将讲解怎样使用这个类. Part 1 简介 使用 ObjectDataSource 缓存数据 和在架构中缓存数据 教程中探讨的缓存技术使用基于时间的有效期 , 在指定的周期过后从缓存

.Net中的缓存依赖配置

缓存--能很好的提高站点的性能. 在访问量大,但更新较少的网站中使用缓存,可以大大提高运行效率: 在.net中给我们提供了很好的缓存机制,页面缓存.数据缓存,还有很好的依赖缓存. 依赖缓存好处就是,跟相依赖的项的改变有关,比如cacheTable表有数据改变时,数据已经缓存了的就会被清楚,重新读取新的数据,能保持数据的实时更新. 头几天学习了下sql 依赖缓存,实现过程和步骤记录下: 环境:windows 2003+IIS6  ,SQL2008+VS2008 一.首先在sql2008中创建数据库

c# 数据库缓存依赖

1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4.0.30319):    aspnet_regsql -S .  -U sa -P pwd -ed -d xxx  -et -t xxx; 缓存依赖禁用: aspnet_regsql -S . \ds -E -dd -d XXX -S服务器名称 -E集成身份验证 -U 账号 -P 密码  -ed为

缓存依赖中cachedependency对象

缓存依赖主要提供以下功能:1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存.2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项.3.可以在网络园(一台服务器上存在多个处理器)或网络场(多台服务器运行同一应用程序)中使用 SQL 缓存依赖项.4.与 SQL 缓存依赖项关联的数据库操作比较简单,因此不会给服务器带来很高的处理成本. 现在把与缓存依赖相关的对象集合如下,并对差异性进行了一定程度的分析……        缓存依赖主要由3个核心类来实现:CacheDepend

缓存依赖(文件、数据库)

前言 缓存的基本用法介绍:我推荐看下  asp.net缓存 . 本篇,我主要写下一般sql的缓存依赖,还有使用Mvc过滤器的数据库缓存依赖. 什么是缓存依赖 1.缓存:是把你要访问的资源,放在内存中,占用一定的内存空间,从而是用户读取内存中的数据,进而减少读取数据库,或资源文件的次数,从而对你的程序并发量,以及返回请求速率上得到提高的一种机制. 2.缓存的不及时性:由于在缓存的作用时间内,数据放在内存中,不知道数据源是否已经改变,从而是信息失去即时效应. 3.解决不及时性:为啦解决第二条的不及时

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

处理大型门户网站 一般都需要 使用缓存技术这个web加速器在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windows版本.这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它; 一.基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口). 二.基

我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( 行级别更改)或者SQL 查询结果的变化. 以前也总结过缓存的使用 页面输出缓存:我用ASP.NET缓存之OutputCache 数据缓存:我用ASP.NET缓存之数据缓存 但是对缓存依赖还是很模糊,前阵子有幸在项目中实际运用了此类.现在结合自己的实际以及和网上大牛的经验,给大家分享一下. [使用背景

cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Server 2005上执行 ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency特性. 添加一个 employee的数据库表. 1CREATETABLE[dbo].[employee](2[i

SQL数据缓存依赖

1:打开项目配置文件 2:启动数据库缓存依赖 aspnet_regsql -C "data source=;initial catalog=codematic;user id=sa;password=" -ed -et -t "T_table" 3:使用缓存依赖项 4:实际的生产环境中如何应用? 原文地址:http://blog.51cto.com/11871779/2092423