.Net中的缓存依赖配置
缓存——能非常好的提高网站的性能。
在訪问量大,但更新较少的站点中使用缓存,能够大大提高执行效率。
在.net中给我们提供了非常好的缓存机制。页面缓存、数据缓存,还有非常好的依赖缓存。
依赖缓存优点就是,跟相依赖的项的改变有关。比方cacheTable表有数据改变时,数据已经缓存了的就会被清楚,又一次读取新的数据,能保持数据的实时更新。
头几天学习了下sql 依赖缓存,实现过程和步骤记录下:
环境:windows 2003+IIS6 ,SQL2008+VS2008
一、首先在sql2008中创建数据库CacheDB,创建表CacheTable
然后在Visual Studio 命令提示下 执行aspnet_regsql.exe 应用程序(也能够在cmd下找到C:/Program Files/Microsoft Visual Studio 9.0/VC>执行)
直接执行asp.net_regsql.exe创建的是选择的数据库的其它特性表。如:aspnet_Roles 等。
以下以数据库CacheDB,数据表CacheTable为例;
要创建数据库的依赖缓存 须执行例如以下命令:
aspnet_regsql -S localhost -U sa -P 123456 -d CacheDB -ed //打开依赖的数据库。然后在创建依赖数据表
aspnet_regsql -S localhost -U sa -P 123456 -d CacheDB -et -t CacheTable //创建依赖数据表
当执行以上命令后会出现数据表 : AspNet_SqlCacheTablesForChangeNotification
aspnet_regsql 命令參数说明:
-? 显示该工具的帮助功能;
-S 后接的參数为数据库server的名称或者IP地址;
-U 后接的參数为数据库的登陆username。
-P 后接的參数为数据库的登录password;
-E 当使用windows集成验证时,使用该功能;
-d 后接參数为对哪一个数据库採用SqlCacheDependency功能;
-t 后接參数为对哪一个表採用SqlCacheDependency功能;
-ed 同意对数据库使用SqlCacheDependency功能;
-dd 禁止对数据库採用SqlCacheDependency功能;
-et 同意对数据表採用SqlCacheDependency功能;
-dt 禁止对数据表採用SqlCacheDependency功能;
-lt 列出当前数据库中有哪些表已经採用sqlcachedependency功能。
以上步骤是在数据库方面要实现处理的
二、配置站点的web.config
在system.web 节点中加入。缓存配置,代码例如以下
这中方式主要是採用数据查询轮询的方式
- <system.web>
- <!--依赖缓存-->
- <caching>
- <!--5秒种轮询一次-->
- <sqlCacheDependency enabled="true" pollTime="5000">
- <databases>
- <add name="CacheDB" connectionStringName="SQLServer"/>
- </databases>
- </sqlCacheDependency>
- </caching>
- </system.web>
參数说明:pollTime:轮换的时间 (毫秒),"CacheDB" :为依赖的数据库,SQLServer :为数据库连接字符串。connectionStringName中的。
三、代码实现
1、 对页面输出缓存使用轮询SQL缓存依赖
依据上面的web.config配置
在要缓存的页面中 <%@ OutputCache Duration="6000" VaryByParam="none" SqlDependency="CacheDB:CacheTable" %> CacheTable为数据表
当CacheTable数据表有修改时,刷新后会显示新的数据。
2、对数据缓存使用轮询SQL缓存依赖
对多个表实现依赖缓存,代码例如以下:
- //这里用GridView对数据进行绑定
- public void BindData()
- {
- string[] tableName = new string[]{"Cache","CacheTable" };//这里用cache表和CacheTable表,cache表的数据库的依赖建立方法如cacheTable。
- AggregateCacheDependency aggregateDependency = new AggregateCacheDependency();//实例化AggregateCacheDependency,用于多个实例SqlCacheDependency的载入
- DataSet ds = Cache["gridview"] as DataSet;//从缓存中读取数据
- if (ds == null)
- {
- ds = DBHelper.ExecuteAdapter("select * from CacheTable inner join Cache on CacheTable.ID=Cache.cacheID");//从数据库中读取数据 。返回DataSet,ExecuteAdapter用的SQLHelper中的訪问方法
- foreach (string table in tableName)
- {
- aggregateDependency.Add(new SqlCacheDependency("Cache", table));//把依赖实例载入到数组中
- }
- // SqlCacheDependency Dependency = new SqlCacheDependency("Cache","CacheTable");//对单个表依赖缓存 直接实例化
- Cache.Insert("gridview", ds, aggregateDependency);//加入到缓存中
- Response.Write(DateTime.Now.ToString());//输出当前时间,以測试是否缓存成功,
- }
- GridView1.DataSource = ds;
- GridView1.DataBind();
- }
以上代码为在数据缓存中使用的依赖缓存
注意:在web.config 中的DBCahce 和页面输出缓存中的DBCache:cahceTabel中 变量的大写和小写要与在用aspnet_regsql.exe建立 数据缓存那大写和小写一样
.Net中的缓存依赖配置的更多相关文章
- asp.net mvc5中使用缓存依赖SqlCacheDependency
缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...
- asp.net mvc中应用缓存依赖文件(xml)的一个小demo
最近项目中加了一个通用模块,就是根据一些特殊的tag,然后根据处理这些tag在同一个视图中加载不同的model(个人觉得此功能无任何意义,只是把不同的代码放在了同一个View中). 我的处理思路是这样 ...
- ASP.NET缓存全解析5:文件缓存依赖 转自网络原文作者李天平
这种策略让缓存依赖于一个指定的文件,通过改变文件的更新日期来清除缓存. ///<summary> /// 获取当前应用程序指定CacheKey的Cache对象值 ///</summa ...
- Asp.net文件缓存依赖
Asp.net文件缓存依赖 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- 缓存技术之——Yii2性能优化之:缓存依赖
Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化.有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的. 依赖可 ...
- Django分别使用Memcached和Redis作为缓存的配置(Linux环境)
1 使用memcached 1.1 安装memcached 安装(Linux) sudo apt install memcached 启动 #方式一: service memcached start ...
- Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略
前言 几乎在所有的应用程序中,缓存都是一个永恒的话题,恰当的使用缓存可以有效提高应用程序的性能:在某些业务场景下,使用缓存依赖会有很好的体验:在 Asp.Net Core 中,支持了多种缓存组 ...
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
Spring Boot中的缓存支持(一)注解配置与EhCache使用 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决 ...
- django缓存优化中caches参数如何配置?
在python开发中,如果运营django进行编写,为了提升效率,常常需要优化缓存,缓存优化中必须掌握的caches参数相关知识: CACHES 配置参数概述 - 格式 CACHES 字典配置格式如下 ...
随机推荐
- linux Cenos-7.0下安装jdk搭建环境变量
搭建linux系统的java环境本人目前所知有两种方式: 第一种是从oracle官网下载linux系统的jdk版本: 第二种是使用yum命令的方式下载安装,咱们今天讲的是第一种方式. 一.工具准备: ...
- java 线程传参 方式
第一类:主动向线程传参 public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...
- Vue+ElementUI: 手把手教你做一个audio组件
目的 本项目的目的是教你如何实现一个简单的音乐播放器(这并不难) 本项目并不是一个可以用于生产环境的element播放器,所以并没有考虑太多的兼容性问题 本项目不是ElementUI的一个音频插件,只 ...
- python 异步IO
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143208573 ...
- Python学习笔记(4)--数据结构之元组tuple
元组(tuple) 定义:tuple和list十分相似,但是tuple是不可变的,即不能修改tuple 初始化:(), ('a', ) , ('a', 'b') //当只有一个元素时,需加上逗号, ...
- Android 连接网络数据库的方式
以连接MS SQL(sqlserver数据库)的网络数据库为例,从当前搜集的资料来看,一共有两种方式:在Android工程中引入JDBC驱动,直接连接:通过WebService等方法的间接连接. 采用 ...
- iPad popView封装
仿照UITableView的UITableViewDataSource 协义 1.代理.让代理帮我们类完毕一些方法 2.完毕当前类不能完毕的事情还有传值等功能 实现方法 // 1. 声明一个协议 // ...
- Linux系统编程——进程间通信:信号中断处理
什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...
- OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)
//一: 迭代器 //数组 NSArray *arr=@[@"1",@"2",@"3",@"4",@"5&qu ...
- java中replaceAll反斜杠\ or java中replaceAll 括号[
java中replaceAll反斜杠\ String s=new String("this is a \\"); s.replaceAll("\\",&qu ...