当前位置: 首页 > news >正文

.net中应用SQL缓存(实例使用)

SQL 缓存依赖

作用:

使用SQL 缓存依赖技术,可以实现当应用程序中对应的数据库中的数据发生改变时

才清除应用程序中对应的缓存,最大化的提高程序的性能。

实现方法:



一、创建数据库

a) 数据库不能为动态附加的模式

b) 启用数据库中的消息传送功能

alter database CacheDependencyTest set enable_broker

“CacheDependencyTest”为自己建的数据库

二、在应用程序中合使用SQL 缓存依赖技术

a) 建立一个Global.asax文件,在其中的“Application_Start”方法添加下面代码:

//当程序运行时启动sql缓存依赖监听

string connString = ConfigurationManager.ConnectionStrings["CacheDependencyTestConnectionString"].ConnectionString;

SqlDependency.Start(connString);





b) 在要使用缓存的页面中使用缓存依赖



protected void Page_Load(object sender, EventArgs e)

{

//select 语句必须包含确切的列名,表名也要加上所属用户名,

//例如下面dbo.CacheTable表的dbo就不能略去

string sql = "SELECT UserName FROM dbo.CacheTable";



string connstring=ConfigurationManager

.ConnectionStrings["CacheDependencyTestConnectionString"]

.ConnectionString;

SqlConnection conn=new SqlConnection(connstring);

SqlDataAdapter da = new SqlDataAdapter(sql, conn);

DataTable dt = new DataTable();

// 创建一个SQL缓存依赖,要用一个selectCommand做为参数

System.Web.Caching.SqlCacheDependency denpendency

= new System.Web.Caching.SqlCacheDependency(da.SelectCommand);



//将数据库中的数据填到dt中,要创建完缓存依赖后才可以填数据

da.Fill(dt);



//如果缓存中没有dt这个表,就将表dt添加缓存中

if (Cache["CacheTable"] == null) {

Cache.Insert(

"CacheTable"//缓存名

, dt//要缓存的对象,这里是一个DataTable

, denpendency//sql缓存依赖对象

//缓存过期时间,这里设置为永不过期.

//所以会一直到数据库中的表数据发生更改时才会清除缓存

,System.Web.Caching.Cache.NoAbsoluteExpiration

//滑动时间,这里设置为0;

//如果设置为5,代表如果你5秒钟内没有发请求,就从缓存中清除

, TimeSpan.Zero

);

//测试用的,这样在界面才知道数据是不是从缓存读取

this.lblFlag.Text = "out of cache"+DateTime.Now.ToString();

}

else

{

this.lblFlag.Text = "use cache" + DateTime.Now.ToString();

}

//重缓存中读取数据

this.GridView1.DataSource = Cache["CacheTable"] as DataTable;

this.GridView1.DataBind();

}







c) 页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AppCache.aspx.cs" Inherits="cacheTest.AppCache" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblFlag" runat="server"></asp:Label>

<asp:GridView ID="GridView1" runat="server">

</asp:GridView>



</div>

</form>

</body>

</html>

 

转载于:https://www.cnblogs.com/liguanghui/archive/2012/03/19/2405490.html

相关文章:

  • js函数集合大全
  • 用vs命令提示符来使用 Installutil.exe来安装和卸载Windows服务
  • 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现按部门组织机构设置权限...
  • [转载]最简单的.NET生成随机数
  • 用原生JS进行CSS格式化和压缩
  • EXT.NET高效开发(四)——实用技巧
  • js 基础
  • 免费空间域名,简易免费安装百科网站教程!!!
  • 函数的弹性设计
  • 常见100个管理学定律
  • flexigrid
  • 内核开发基础——'make menuconfig' requires the ncurses libraries
  • COJ 1156 Switching bulbs
  • 配置Struts 2应用程序的安全功能
  • 程序猿的执业修养(四)——全力以赴,做到最好
  • Angular 响应式表单之下拉框
  • Angular2开发踩坑系列-生产环境编译
  • IDEA 插件开发入门教程
  • js学习笔记
  • Laravel Mix运行时关于es2015报错解决方案
  • Python利用正则抓取网页内容保存到本地
  • Spring Boot MyBatis配置多种数据库
  • ucore操作系统实验笔记 - 重新理解中断
  • V4L2视频输入框架概述
  • VuePress 静态网站生成
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端面试总结(at, md)
  • 如何在 Tornado 中实现 Middleware
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 再谈express与koa的对比
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #前后端分离# 头条发布系统
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (3)llvm ir转换过程
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .jks文件(JAVA KeyStore)
  • .NET 依赖注入和配置系统
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET开发者必备的11款免费工具
  • .net生成的类,跨工程调用显示注释
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @Autowired自动装配
  • @Data注解的作用
  • @Valid和@NotNull字段校验使用
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)