ASP.NET缓存

.NET ASP.NET 中的缓存Cache 一.为什么要引入缓存Cache? 我们知道,造成高并发的原因是大量读写的问题,一般的对于一个系统,读总是比写多,如我们总是逛淘宝,京东,天猫,唯品会等,但我们并不一定买东西(买东西,即下单,下单的操作,对应DB的Write操作),缓存主要解决读的问题(当然,在后期的文章中,我会讲到消息队列MQ,也是一种缓存机制,其不仅仅解决读的问题,还解决写的问题)。 很好,我们知道缓存主要解决读的问题,那么,我... 阅读详情

 

介绍

缓存是在内存存储数据的一项技术,也是ASP.NET中提供的重要特性之一。例如你可以在复杂查询的时候缓存数据,这样后来的请求就不需要从数据库中取数据,而是直接从缓存中获取。通过使用缓存可以提高应用程序的性能。

主要有两种类型的缓存:

1.输出缓存Output caching
2.数据缓存Data caching

 

1. 输出缓存(Output Caching)

使用输出缓存,你可以缓存最后输出的HTML页面,当相同的页面再次请求的时候,ASP.NET不会再执行页面的生命周期和相关代码而是直接使用缓存的页面,语法如下:

<%@ OutputCache Duration=”60” VaryByParam=”None”  %> 

Duration 属性设置页面将被缓存60妙。任何的用户请求都会被缓存,在缓冲的60秒内相同的请求都会直接使用缓存的页面。当缓存过期后ASP.NET会再次执行页面代码并且为下一个60秒创建一个新的HTML缓存。

  <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
        CodeFile="OutputCachingTest.aspx.cs" Inherits="OutputCachingTest" Title="Untitled Page" %>
 <%@ OutputCache Duration="20" VaryByParam="None" %>
 <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
   <div class="title">Output Cache</div>
   Date: <asp:Label ID="lblDate" runat="server" Text="" />
   Time: <asp:Label ID="lblTime" runat="server" Text="" />       
 </asp:Content>
protected void Page_Load(object sender, EventArgs e)
{
   lblDate.Text = DateTime.Now.ToShortDateString();
   lblTime.Text = DateTime.Now.ToLongTimeString(); 
} 

在这个例子中页面将被缓存20秒。

通过查询字符串缓存(Cache by Query String )

在实际应用中页面往往会根据一些参数动态的改变页面的内容。如果你的页面是通过查询字符串来获取信息的,你可以根据查询字符串很容易的缓存页面的不同拷贝。VarByParam=”None”指定ASP.NET只存储缓存页面的一个拷贝。VarByParam=”*” 指定ASP.NET根据不同的查询字符串存储不同的缓存页面。

<%@ OutputCache Duration="60" VaryByParam="*" %>

<div align="right">
   <a href="OutputCachingTest2.aspx">No Query String</a> | 
   <a href="OutputCachingTest2.aspx?id=1">ID 1</a> | 
   <a href="OutputCachingTest2.aspx?id=2">ID 2</a> | 
   <a href="OutputCachingTest2.aspx?id=3">ID 3</a> |
   <a href="OutputCachingTest2.aspx?id=3&langid=1">ID 3</a>
</div> 


上面的例子中,在查询字符串中传了不同的ID.ASP.NET为每一个ID都存储了单独的缓存页面。这种方式会有一些问题就是当查询字符串范围很广的时候。
这个时候我们可以在VarByParam 属性中指定重要的查询字符串变量的名字,如下:

<%@OutputCacheDuration="60"VaryByParam="id;langid"%>

这样,ASP.NET可以根据id” or “langid”来缓存不同的缓存版本。

 

自定义缓存(Custom Caching)

你也可以创建自定义的程序来缓存页面。ASP.NET提供了一种很便捷的方式来创建自定义缓存,使用VarByCustom属性指定自定义缓存类型的名字。

%@OutputCacheDuration="20"VaryByParam="None"VaryByCustom="browser"%

你还要创建为缓存生成自定义字符串的方法,如下:

public override stringGetVaryByCustomString(HttpContext context, stringcustom)
{
    if(custom == "browser")
    {
       returncontext.Request.Browser.Browser +
              context.Request.Browser.MajorVersion;
    }
    else
  
{
       return base.GetVaryByCustomString(context, custom);
    }
}

这个方法必须写在global.asax文件中。ASP.NET使用该方法返回的字符串来实现缓存,如果这个方法在不同的请求中返回相同的字符串,ASP.NET就会使用缓存的页面,否则就会生成新的缓存版本。

上面的例子中GetVaryByCustomString()方法根据浏览器的名字创建缓存字符串,ASP.NET会根据不同的浏览器请求创建不同版本的缓存。

控件缓存(Control Cache )

上面的缓存技术可以让你很容易的缓存整个页面,如果要缓存指定控件的内容,可以通过指定VaryByControl 属性来完成。

<%@OutputCacheDuration="20"VaryByControl="MyControl_1"%>

上面代码ASP.NET将会缓存MyControl_1控件20分钟。如果要根据一些属性值来缓存控件只需要将OutPutCache指令加入*.ascx页面。 

<%@Control Language="C#"AutoEventWireup="true"CodeFile="MyControl.ascx.cs"Inherits="Controls_MyControl"%>
<%
@OutputCacheDuration="20"VaryByControl="EmployeeID"%>
......
......

VaryByControl=”EmployeeID”告诉ASP.NET根据控件中声明的EmployeeID属性来创建不同版本的缓存。

在 .ascx.cs 文件加入EmplyeeID属性为ASP.NET 缓存使用。

private int_employeeID;

public intEmployeeID
{
   get{ return_employeeID; }
   set{ _employeeID = value; }
}

protected voidPage_Load(objectsender, EventArgs e)
{
   lblDate.Text = DateTime.Now.ToShortDateString();
   lblTime.Text = DateTime.Now.ToLongTimeString();

   lblEmployeeID.Text = EmployeeID.ToString();

}

在页面中增加控件并且设置 EmployeeID.

<%@RegisterSrc="Controls/MyControl.ascx"TagName="MyControl"TagPrefix="uc1"%>
<asp:ContentID="Content1"ContentPlaceHolderID="ContentPlaceHolder1"runat="Server">
    <
divalign="center">
        <
uc1:MyControlID="MyControl1"runat="server"EmployeeID="1"></uc1:MyControl>
    </
div>
</
asp:Content>

 

缓存配置文件(Cache Profile )

web.config可以配置缓存相关的设置,

<system.web>
  <
caching>
    <
outputCacheSettings>
      <
outputCacheProfiles>
     <
addname="ProductItemCacheProfile" duration="60"/>
   </
outputCacheProfiles>
</
outputCacheSettings>
   </
caching>
</
system.web>

你可以通过设置 CacheProfile=”ProfileName” 属性 来使用上面的配置:

%@OutputCacheCacheProfile="ProductItemCacheProfile"VaryByParam="None"%

2. 数据缓存(Data Caching)

ASP.NET还提供了另一种灵活的缓存类型:数据缓存。你可以将一些耗费时间的条目加入到一个对象缓存集合中,以键值的方式存储。

Cache["Name"] = data;

我们可以通过使用Cache.Insert()方法来设置缓存的过期,优先级,依赖项等。

date1 = DateTime.Now;
Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero);

ASP.NET允许你设置一个绝对过期时间或滑动过期时间,但不能同时使用。

缓存依赖项Cache dependency

缓存依赖项使缓存依赖于其他资源,当依赖项更改时,缓存条目项将自动从缓存中移除。缓存依赖项可以是应用程序的 Cache 中的文件、目录或与其他对象的键。如果文件或目录更改,缓存就会过期。

date2 = DateTime.Now;

string[] cacheKeys = { "Date1"};
CacheDependency cacheDepn = newCacheDependency(null, cacheKeys);
Cache.Insert("Date2", date2, cacheDepn);

上面的例子“Date2”缓存对象依赖“Date1”缓存条目,当 “Date1” 对象过期后“Date2” 将会自动过期。CacheDependency(null, cacheKeys)中的第一个参数为空是由于我们只监视缓存键的更改情况。

回调函数和缓存优先级(Callback Method and Cache Priority)

ASP.NET允许我们写一个回调函数,当缓存条目从缓存中移除的时候触发。还可以设置缓存条目的优先级。

protected void Page_Load(object sender, EventArgs e)
{
  DateTime? date1 = (DateTime?)Cache["Date1"];
  if (!date1.HasValue) // date1 == null
  {
    date1 = DateTime.Now;
    Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero, 
                 CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack));
  }

  DateTime? date2 = (DateTime?)Cache["Date2"];
  if (!date2.HasValue) // date2 == null
  {
    date2 = DateTime.Now;
    Cache.Insert("Date2", date2, null, DateTime.Now.AddSeconds(40), TimeSpan.Zero, 
                 CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack));
  }

  // Set values in labels
  lblDate.Text = date1.Value.ToShortDateString();
  lblTime.Text = date1.Value.ToLongTimeString();

  lblDate1.Text = date2.Value.ToShortDateString();
  lblTime1.Text = date2.Value.ToLongTimeString();

}
   
private void CachedItemRemoveCallBack(string key, object value, CacheItemRemovedReason reason)
{
  if (key == "Date1" || key == "Date2")
  { 
     Cache.Remove("Date1");
     Cache.Remove("Date2");
  }
}

例子中创建了“Date1” 和 “Date2”缓存。“Date1” 在20秒后过期“Date2”为40秒。但是由于我们注册了移除的回调函数,当“Date1” 或 “Date2”其中一个过期都会执行CachedItemRemoveCallBack 方法,在这个方法中移除了两个缓存条目,ASP.NET还提供了处理缓存条目更新时的回调函数CacheItemUpdateCallback 。

【保研经验】北科自动化到北大工学院 作者:办公室某学长 谢邀。。。作为拖延症晚期患者,希望能在我科开学前写完。 先简单介绍一下我的保研过程,申请了清华叉院&amp;北大叉院大数据&amp;北大信科计算机夏令营,三者都没入营;申请了自所夏令营(自所来宣讲时未交简历,这是重大错误),给了第二批补录但没去;最终九推去了北大工学院。我的这次保研最终成功的经历可以说有一定运气成分,不具有普适性,但在前期准备过程中还是有经验可以分享的。 ... 阅读详情

相关推荐

MT4/MT5数据源接入全攻略:从买服务、自研API到低成本DDE,哪种方案适合你?

本文全面解析MT4/MT5数据源接入的三种主流方案:商业服务、自研API和低成本DDE,详细对比其技术参数、成本结构和适用场景。帮助技术团队根据业务需求选择最优方案,确保外汇交易系统的数据流稳定性和实时性,提升交易体验和业务连续性。

weixin_42568801的博客 173

WebForm.aspx缓存(Cache)

缓存(Cache) 1,如果每次进入页面的时候都查询数据库而生成页面内容的话,如果访问量非常大 则网站性能会非常差,如果只有第一次访问的时候才查询数据库而生成页面内容。以后都直接输出内容。则能提高系统的性能。这样无论有多少人访问都只访问一次数据库。所以数据库的压力不变(即:即便再多人访问页面,也不会对数据库造成压力) 缓存是一中利用空间换取时间的技术,存在与计算机中的很多地方,用来将一些慢速设备

Fanbin168的专栏 4076

HFSS学习笔记——Vivaldi天线仿真(一)

Vivaldi 天线HFSS仿真,HFSS中指数曲线绘制及曲面绘制。

and_future的博客 1万+

.net页面缓存

1,ASPX页面缓存页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam="none" %>这样整个页面的内容都会被缓存,页面中的ASP.NET代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。页面缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访...

220

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

GraphRAG 与 HippoRAG 深度对比:在 RAGFlow 中如何选择知识图谱方案?

本文深入对比了GraphRAG与HippoRAG在RAGFlow中的知识图谱构建方案,分析了两者在技术架构、资源消耗和场景适配性上的核心差异。GraphRAG适合需要快速响应和资源有限的场景,而HippoRAG则更适用于精确关系推理的专业领域。文章还提供了RAGFlow的演进路线和选型决策框架,帮助架构师根据实际需求做出合理选择。

weixin_27889245的博客 247

[转]缓冲技术探讨(三)

2.1.1.2 使用缓存回调(Cache Callback) 你可以定义回调,这样当移除自动发生时, 你可以不移除它或者使用新的数据来替换它。如: 1CacheItemRemovedCallbackonRemove=newCacheItemRemovedCallback(this.RemovedCallback); 2Cache.Insert("CachedItem",...

diangeng8874的博客 149

嵌入式主板系统配置实战:OTG切换、双网共存与开机自启详解

在嵌入式Linux系统开发中,系统配置是连接硬件平台与应用功能的关键桥梁。其核心原理在于通过内核参数、文件系统接口和系统服务等机制,实现对硬件资源和系统行为的精细控制。掌握这些配置技术,对于提升开发效率、保障系统稳定性和实现产品差异化至关重要。无论是工业物联网网关、智能终端还是边缘计算设备,都需要对网络、USB、启动项等基础功能进行可靠配置。本文聚焦于嵌入式主板开发中的高频需求,例如OTG功能模式切换、双网共存路由策略以及基于systemd的开机自启动实现,通过具体的命令和脚本示例,为开发者提供一套可直接复

weixin_30827827的博客 321

ASP.NET缓存:缓存移除项时通知应用程序

1、Asp.net提供了CacheItemRemovedCallback委托来实现缓存移除时通知应用程序。在业务类中只需实现一个与CacheItemRemovedCallback委托相同签名的方法。 2、可以通过创建缓存的Insert方法实现,也可以通过创建缓存的Add方法实现。 3、定义回调方法的相同签名的委托如下 public delegate void CacheItem...

wsoftware的博客 146

Ubuntu18.04下Carla安装——经验史

Ubuntu下的Carla安装

m0_51267207的博客 2679

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1092

Asp.net中的缓存操作

在ASP.NET实际项目开发中,我们可以采取基本的三种缓存技术:页面缓存、局部页面缓存和数据缓存 1.页面缓存是指缓存整个页面,且设置刷新间隔时间,刷新间隔时间一般以秒为单位(注意:缓存不能全部刷新,且刷新间隔不依赖外部事件); 2.局部页面缓存也叫部分页面缓存,指通过设定影响页面的参数,此时的缓存存储页面的多个版本,一般情况需要按照参数值为这些页面版本设置索引; 3.数据缓存也叫应用程序缓...

Jie_Studio的博客 1166

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

ASP.NET中缓存的详解

页面输出缓存属性设置:用@OutputCache指令设置页面输出缓存。@OutputCache指令在asp.net页或者页中包含的用户控件的头部声明。@OutputCache的常用属性如下:1、    CacheProfile 此属性是为了调用webconfig文件中节下 节点下一个可用项。如:webconfig中增加节点caching>        outputCach

GreenOfBamboo的专栏 1390

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ASP.NET缓存机制

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style

lffxgthmhfy的专栏 977

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

asp.net的缓存机制

缓存是把应用程序中的需要频繁、快速访问的数据保存在内存中的编程技术,通常用来提高网络的响应速度。在ASP.NET中使用Cache类来管理缓存。下面详述控件级数据缓存功能和页面级数据缓存功能的实现: (1)数据库缓存依赖数据库缓存依赖由SqlCacheDependency类管理;数据库缓存依赖的优点:1、提高数据呈现速度,每次获取数据后,系统根据用户设置的缓存时间,在有效期内,将

VinoYang的专栏 3127

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ASP.NET 缓存

缓存体系 缓存 页面缓存 应用程序数据缓存 页面输出缓存 页面部分缓存 .

qq_48307365的博客 669

ASP.NET数据缓存四大方案

来自:http://www.codesky.net/article/200907/129558.html 今天我们将要学习的是:ASP.NET数据缓存。 接触过asp.net 1.x版本的朋友可能会说,这不是个新东西了。 是的,ASP.NET数据缓存确实不是asp.net 2.0的新产物,但是asp.net 2.0赋予数据缓存更多属性和方法,让数据缓存可以在asp.net 2.0时代大展雄风

码农 1187

ASP.NET中Cache缓存详解

一.缓存概述 (一)ASP.NET缓存技术种类 在ASP.NET实际项目开发中,我们可以采取基本的三种缓存技术:页面缓存、数据源缓存和数据缓存 1.页面缓存 给页面添加 <%@OutputCache Duration="15" VaryByParam="none"%> 标签就可以启用页面缓存, 页面中的ASP.NET代码,数据源在缓存期间都不会运行,而是直接输出缓存的页面内容,...

qq_43552118的博客 1730

Asp.net 缓存技术总结

提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存。Asp.net下的缓存机制十分强大,用好缓存机制可以让我们极大的改善web应用的性能,下面是一些总结的缓存的知识点,与大家分享交流: 1.页面缓存         要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。           CacheProfile

星星的专栏 769

ASP.NET 页面缓存以及数据缓存等总结(收集)

页面缓存 使用OutputCache指令。 <%@OutputCacheDuration="3600" Location="Any" VaryByCustom="browser" VaryByParam="RequestID"%> 其中Duration和VaryByParam特性...

weixin_30556161的博客 180

ASP.NET-缓存技术

1. ASP.NET 缓存简介        缓存可以生成高性能的Web应用程序。将那些频繁访问而且不需要更新的数据存在内存中,当用户再一次访问这些数据时,可以避免重复取满足之前请求的信息,快速显示请求的Web页面。        ASP.NET 3种缓存技术:页面输出缓存、页面部分缓存和页面数据缓存。 2. 页面输出缓存 (1)页面输出缓存概述        页面缓存机制是最为简单的缓

qq_34874791的博客 513

ASP.NET缓存剖析

如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的。在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术。因为Cache的存取速度比内存快,因而引入Cache能够有效的解决CPU与内存之间的速度不匹配问题。硬件系统可以利用Cache存储CPU访问概率高的那些数据,当CPU需要访问这些数据时,可以直接从Cache中读取,而不必访问存取速度相对

程序如人生,人生如程序... 527

ASP.net中常用的缓存方式

1)页面缓存(对整个页面进行缓存).net2.0中为:你就可以有效的利用第一次请求里生成的页面输出缓存内容,3600秒后重新生成一道页面内容。这种技术其实也是运用一些低层的Cache API来实现。用页面输出缓存有几个参数可以配置,如上面所说的VaryByParams参数,该参数表示什么时候触发重输出的条件,也可以指定在 Http Get或Http Post 请求模式下缓存输出。例如当我们设置该参

Jane 975

Asp.net的局部缓存

如果页面的部分内容动态改变,而部分内容则是保持不变,我们则可以考虑用asp.net的局部缓存技术       有两种方案可以解决,一种是控件缓存,即把不变的内容做成用户控件,然后让此控件缓存,而整个页面不会缓存。另一种是缓存后替换,即整个页面缓存,而用Substitution控件来处理动态内容。一:控件缓存在控件的ascx页面山写本控件缓存120秒或者在服务端[PartialC

网络乞丐 1711
上一篇: ASP.NET跨页面传值技巧
下一篇: 概述反射和序列化(转)
fisea
博客等级 码龄19年 40粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值