`

ASP.NET中的缓存技术

    博客分类:
  • .NET
阅读更多

http://www.cnblogs.com/ltp/archive/2009/06/30/1514311.html

缓存是把应用程序中需要频繁,快速访问,但又不经常改变的数据保存在内存中的编程技术,可以提高网络响应速度。是由Cache类来管理的。

ASP.NET3.5中的数据库缓存依赖

数据库缓存依赖由SqlCacheDependency类管理,其优点有:

1.由于用户请求的数据被保存在内存中而不是数据库中,所以访问速度快。

2.可以单独缓存页面中某一控件(一般为数据源控件)的数据,而其他控件不受影响。

3.当数据库中数据发生改变时,会删除内存中相应的缓存数据并向Cache中添加修改后的数据。

要使用数据库缓存依赖(仅限轮询缓存依赖)需要先配置数据库:

1.在web.config的system.web下添加节点如下

 <caching>

  <sqlCacheDependency enabled="true" pollTime="1000">

   <databases>

    <add connectionStringName="ConnectionString" name="Database1" pollTime="1000"/>

   </databases>

  </sqlCacheDependency>

 </caching>

开启数据库缓存依赖并且每1秒钟轮询一次数据表(实现了上面说的优点3)

connectionStringName指定了连接字符串的名字 name指定了数据库名字

2.为SQLServer启用缓存通知,有两种方法

一是在VS命令行里使用aspnet_regsql.exe

aspnet_regsql -S .\SQLEXPRESS -E -d Database1 -t Student -ed -et (Student为表名)

注意\的方向,另外无法使用aspnet_regsql.exe为App_Data 数据库文件启用缓存通知(见下面第2个荐)

参数的解释见http://kendezhu.iteye.com/blog/840907的Session

更多http://www.cnblogs.com/weiyuxinghuacun/archive/2010/08/27/1810143.html|荐

http://www.cnblogs.com/systemxgl/archive/2011/01/24/1942875.html|荐(原理)

二是在Page_Load中添加如下代码

System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications

(ConfigurationManager.ConnectionStrings["连接名"].ConnectionString,"表名");

不应该在ASP.NET页面中使用SqlCacheDependencyAdmin类,因为调用该类的方法需要创建表,存储过程和trigger

。出于安全考虑,ASP.NET进程不应该被赋予这些权限。实质上使用aspnet_regsql.exe也是通过

SqlCacheDependencyAdmin类在数据库中创建AspNet_SqlCacheTablesForChangeNotification数据库表,及为启动缓存通知的表创建trigger,创建一些存储过程等(但起码不是在程序中创建)。

 

数据库缓存依赖分为两种

1.轮询缓存依赖(ASP.NET应用程序需要定时地轮询数据库的修改来更新缓存)

以上配置就是针对轮询缓存依赖的配置

可以在一个用户控件中使用<%@ OutputCache %> 指令来使用轮询缓存依赖。也就是说,可以使用轮询缓存依赖来

实现部分页面缓存。

2.推缓存依赖(数据库修改后会通知ASP.NET应用程序来更新缓存,不支持数据库文件)

不能对包含<%@ OutputCache %>指令的用户控件使用推SQL缓存依赖。也就是说,不能对部分页面缓存使用推缓存

依赖。

Microsoft SQL Server 2005包含一个名为查询通知的功能,它在后台使用Microsoft SQL Server 2005的Service 

Broker。这个Service Broker可以在数据库中的数据变更时自动给ASP.NET应用程序发送一个消息。

相比于轮询缓存依赖,使用推缓存依赖的好处是ASP.NET应用程序不必定时地轮询数据库的修改。如果有修改,数据库会通知应用程序。

但使用推缓存依赖的查询类型有诸多限制,见第2个荐的4.6.6

要使用推缓存依赖需要做的配置有:

1.为推缓存依赖配置数据库

启用Microsoft SQL Server 2005 Service Broker。使用SELECT name, is_broker_enabled FROM 

sys.databases来检查Service Broker是否已经为特定的数据库激活。使用ALTER DATABASE 数据库名 SET 

ENABLE_BROKER来为特定的数据库激活。最后,ASP.NET进程必须有足够的权限来订阅查询通知。当一个ASP.NET页

面由IIS处理时,页面在NT Authority WET WORK SERVICE账号(对于Windows Server 2003或Vista)或者ASPNET账号(对于其他操作系统,如Windows XP)上下文中执行。

执行下面的SQL命令能给YOURSERVER服务器上的本地ASPNET账号赋予需要的权限:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "YOURSERVER\ASPNET"

2.为推缓存依赖配置应用程序

在应用程序可以接收到变更通知之前,必须启用查询通知监听器。可以在Global.asax文件中启用监听器。

<%@ Application Language=”C#” %>

<%@ Import Namespace=”System.Data.SqlClient” %>

<%@ Import Namespace=”System.Web.Configuration” %>

<script runat=”server”>

    void Application_Start(object sender, EventArgs e)

    {

        // Enable Push SQL cache dependencies

        string conString = WebConfigurationManager.ConnectionStrings

        ["连接名"].ConnectionString;

        SqlDependency.Start(conString);

    }

</script>

Application_Start事件处理程序只在应用程序刚开始运行时执行一次。SqlDependency.Start()方法使用一个数

据库的连接字符串调用。

 

现在来使用一下轮询缓存依赖

1.对数据源控件使用轮询缓存依赖

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 

ConnectionString="<%$ ConnectionStrings:ExamOnlineConnectionString %>" 

SelectCommand="SELECT * FROM [students]" EnableCaching="True" CacheDuration="10"

SqlCacheDependency="ExamOnline:students"></asp:SqlDataSource>

只要按照上面的说法正确的进行了轮询缓存依赖的配置,再在此设置一下数据源控件的属性即可:

EnableCaching:为此数据源控件启动缓存

CacheDuration:数据源控件里这次读取的数据可以被缓存的时间,单位是秒

SqlCacheDependency:此缓存依赖于哪个表,多个表需用分号隔开

ASP.NET每次去轮询数据库如果数据表发生了改变,不管到没到CacheDuration该缓存就会被更新

2.对整个页面使用轮询缓存依赖

<%@ OutputCache SqlDependency="ExamOnline:students" Duration="1000" VaryByParam="none"%>

SqlDependency:此缓存依赖于哪个表,多个表需用分号隔开

Duration:整个页面的数据可以被缓存的时间,单位是秒

ASP.NET每次去轮询数据库如果数据表发生了改变,不管到没到Duration该缓存就会被更新。

但由于是整个页面都会被缓存直到到了Duration或所依赖的数据库表有变化才能更新这个缓存,所以个人感觉这样会令很多"无辜的"其他与该数据表无关的控件受到牵连,所以个人不提倡使用整夜缓存。

3.对数据(Datatable等)使用轮询缓存依赖,见第2个荐的4.6.5

分享到:
评论

相关推荐

    基于改进YOLOv5s的森林烟火检测算法.pdf

    基于改进YOLOv5s的森林烟火检测算法.pdf

    人力资源管理工具绩效考核excel模板01.xlsx

    人力资源管理工具绩效考核excel模板01

    施工班组长绩效考核表.xls

    施工班组长绩效考核表

    57 -营业部经理绩效考核表1.xlsx

    57 -营业部经理绩效考核表1

    XX公司行政部绩效考核指标.xls

    XX公司行政部绩效考核指标

    ant-apache-xalan2-1.9.4-2.el7.x64-86.rpm.tar.gz

    1、文件内容:ant-apache-xalan2-1.9.4-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ant-apache-xalan2-1.9.4-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    部门绩效考核表模板(基于KPI以月度为例2).xlsx

    部门绩效考核表模板(基于KPI以月度为例2)

    11-6-质检员绩效考核表(含自动计算、等级评价及任意设置等级).xlsx

    11-6-质检员绩效考核表(含自动计算、等级评价及任意设置等级)

    2024年最新全国河流、湖泊矢量数据(数据权威)

    2024最新全国河流湖泊矢量数据 【数据介绍】 2024年中国河流湖泊数据 一份包含中国境内所有主要河流和湖泊的地理信息数据。 数据格式:Shapefile:广泛使用的GIS数据格式,方便在各类GIS软件中使用。 数据获取:访问OpenStreetMap官网,通过导出工具选择中国区域并下载所需的数据。 使用Geofabrik等第三方网站,可以下载预处理好的中国区域的OSM数据。 数据使用:GIS软件:如QGIS、ArcGIS等,用户可以在这些软件中导入OSM数据进行可视化、分析和编辑。 数据应用: 环境研究:分析河流湖泊的水质变化,研究水资源分布及其环境影响。 城市规划:用于规划城市水系、洪水防控、水资源管理等。 导航和旅游:为河流湖泊的导航和旅游路线规划提供数据支持。 科研:为水文地理研究、生态保护、气候变化等领域提供基础数据。 数据特点: 实时更新:OSM数据由全球用户贡献,具有较高的实时性和更新频率。 开放性:所有数据都在开放许可下发布,允许用户自由使用、修改和分发。 详细性:由于全球志愿者的不断努力,数据细节较为丰富,涵盖了从主要河流湖泊到小型水体的广泛范围。 数据时间2024年5月,shp格式,数据来源OpenStreetMap。 OpenStreetMap(OSM)介绍: 一个开放的、免费的、全球性的地图项目,由全球的志愿者和地图爱好者们共同创建和维护。 OSM的数据包括道路、建筑、公园、河流、湖泊等各类地理信息。由于是由众多志愿者共同编辑,OSM的数据具有很高的实时性和详细程度,特别是在一些活跃的区域,地图数据的更新速度和精度往往超过商业地图服务。 用户可以直接在OSM官网下载地图数据,数据格式主要有OSM XML和PBF等。此外,还有一些第三方网站和工具提供更加便捷的数据下载和处理服务,如Geofabrik、Overpass API等。 OSM的数据可以在各种GIS软件中使用,如QGIS、ArcGIS等。此外,还可以使用Python的OSMnx、GeoPandas等库进行编程处理,或者通过Leaflet、Mapbox等JavaScript库将OSM数据集成到web地图应用中。 OSM的所有数据都在开放许可下发布,允许用户自由使用、修改和分发。这使得OSM成为了许多公共项目、研究机构和商业公司的重要数据来源。

    部门绩效考核评分表.xlsx

    部门绩效考核评分表

    12-11-运输车队长绩效考核表(含自动计算、等级评价).xlsx

    12-11-运输车队长绩效考核表(含自动计算、等级评价)

    ant-javadoc-1.9.4-2.el7.x64-86.rpm.tar.gz

    1、文件内容:ant-javadoc-1.9.4-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ant-javadoc-1.9.4-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    springboot整合 freemarker方法

    springboot整合 freemarker方法

    apache-commons-codec-1.8-7.el7.x64-86.rpm.tar.gz

    1、文件内容:apache-commons-codec-1.8-7.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-codec-1.8-7.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    (数据权威)全国旅游抽样调查数据

    《旅游抽样调查资料》是反映入境游客在华(内地)花费和国内居民国内旅游情况的资料性年刊,分为上下两篇。 上篇为在华(内地)停留时间在3个月以内的入境游客抽样调查资料,由综合分析报告和调查分类数据两部分组成,分类数据包括:入境游客的主要特征,入境外国人、港澳台同胞的花费水平和花费构成、在境内的停留时间以及入境次数、流向和对住宿单位的选择等。 下篇为国内旅游抽样调查资料,汇集了对城镇居民和农村居民的国内旅游抽样调查结果,共分为四个部分:第一部分为综合分析报告;第二部分为国内旅游出游及花费情况;第三部分为城镇居民国内旅游抽样调查分类数据;第四部分为农村居民国内旅游抽样调查分类数据。

    二代身份证信息读取(vfp8.0)

    1、表单界面,身份证信息保存在dbf表中,供vfp应用使用,可导出为xls电子表格。 2、提供了身份证过期校验和查询功能。

    人事行政主管绩效考核评分表.xls

    人事行政主管绩效考核评分表

    08 -大堂副理绩效考核表1.xlsx

    08 -大堂副理绩效考核表1

    apr-1.4.8-7.el7.x64-86.rpm.tar.gz

    1、文件内容:apr-1.4.8-7.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apr-1.4.8-7.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    ComponentNameError解决办法.md

    ComponentNameError解决办法.md

Global site tag (gtag.js) - Google Analytics