Sql缓存依赖
来源:互联网 发布:js监听手机输入法关闭 编辑:程序博客网 时间:2024/05/02 05:04
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中添加一条记录,如图:
三.配置应用程序
<caching> <sqlCacheDependency enabled="true" pollTime="1000"> <databases> <add name="mydatabase" connectionStringName="pubsConnectionstring"/> </databases> </sqlCacheDependency> </caching>
注释:pollTime设置为1000ms,意思是应用程序按照1s的频率进行轮询,如果数据库表Customers数据被修改,则缓存在1m内失效,重新加载新的数据,然后缓存,知道数据被再次修改,检测数据库表的变化,connectionStringName被设置为要对哪一个数据库进行轮询的数据库连接字符串
此时已经对sql轮询模式已经设置完毕。
四.验证
1.建立页面default.aspx
2.设置缓存:
<%@ OutPutCache Duration="20" VaryByParam="none" SqlDependency="mydatabase:Customers" %>注释:本页面缓存20秒,mydatabase为配置文件中设置sql缓存的项的name值,Customers是要被缓存的表3.页面测试代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <%= DateTime.Now.ToString("T") %> <div> <asp:GridView runat="server" DataSourceID="srcCustomers" /> <asp:SqlDataSource runat="server" ID="srcCustomers" ConnectionString="<%$ ConnectionStrings:SqlTestConnstring %>" SelectCommand="SELECT * FROM [SqlTest].[dbo].[Customers]" /> </div> </form></body></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的记录有没有被修改,如果没有修改则使用缓存中的数据,如果被修改则重新获取数据然后放入缓存中。
好了,今天就到这儿哦,如有错误,请指正!
- Sql缓存依赖
- sql SqlCacheDependency缓存依赖
- SQL 缓存依赖
- SQL数据库缓存依赖
- Sql缓存依赖
- SQL缓存依赖
- SQL数据缓存依赖
- Sql缓存依赖的实例
- SQL数据缓存依赖总结
- SQL数据缓存依赖功能
- SQL数据缓存依赖总结
- asp.net Sql缓存依赖
- asp.net 文件缓存依赖和sql缓存依赖
- 缓存--自定义缓存依赖、自定义输出缓存、缓存依赖SQL SERVER 2005与2008
- SQL轮询数据依赖缓存
- SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
- 关于sql 2005/2008 缓存依赖
- SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
- oauth认证----豆瓣客户端
- android中的对话框之三:自定义对话框
- 网站制作入门
- WebKit自动化回归测试之LayoutTest实践 (超时问题的处理)
- DIV+CSS切图过程中的命名规则
- Sql缓存依赖
- linux和windows的内存组织方式
- 设置DIV内图片垂直居中
- Command Line Shell For SQLite
- 很抱歉,程序AssistantGui.exe发生了错误,即将关闭
- 闲聊linux中的input设备(1)Linux中的设备大家族
- Access denied for user 'root'@'localhost'问题的解决
- 闲聊linux中的input设备(2)初次相识便好上
- 闲聊linux中的input设备(3)如果不认识他们仨,故事继续不下去了