zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ASP.NET_数据缓存理论

2023-09-14 09:16:29 时间

缓存

  缓存是一种在计算机中广泛用来提高性能的技术,它将访问频率高或构造成本高的数据保留在内存中。

  在Web应用程序的上下文中,缓存用于在HTTP请求时保留页面或者数据,并在无须新创建的情况加多次使用它们。

  一旦应用程序停止或者重新启动,其缓存将被清除

  生成高性能、可缩放的Web应用程序最重要的因素之一是能够在首次请求项时将这些项存储在内存中,不管它们是数据对象,还是页的某些部分。可以将这些项存储在Web服务器上或请求流中的其他软件上,例如代理服务器或浏览器。使用户能够避免重新创建满足先前请求的信息,尤其是那些需要大量处理时间或资源的信息。这就是通常所说的缓存

  它允许用户使用多种技术跨HTTP请求存储页输出或应用程序数据并对其进行重复使用,这样,服务器不需要重新创建信息,从而节省了时间和资源

ASP.NET提供了两种可以用来创建高性能Web应用程序的缓存类型

  • 输出缓存 它允许将动态的页或用户控件响应缓存在输出流(从发起服务器到请求浏览器)中任何具备HTTP1.1或更高缓存功能的设备上。当后面的请求发生时,不执行页或用户控件代码,缓存的的输出用于满足该请求
  • 应用程序缓存 (传统的) 可以使用它以编程的方式将任意对象(例如数据集)存储到服务器内存,这样用户的应用程序可以节省重新创建这些对象所需的时间和资源

页面输出缓存

  • 页面输出缓存作为最简单的缓存形式,将已经生成的动/静态页面全部保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期
  • 适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面;对于数据经常更新的页面,则不适用
  • 设置页面输出缓存可以使用两种方式:
    • @OutputCache 指令
    • 页面输出缓存 API ——HttpCachePolicy

页面部分缓存

  页面部分缓存是指输出缓存页面的某些部分。而不是缓存整个页面内容。实现页面部分缓存有两种机制:

  • 一种是将页面中需要缓存的部分置于用户控件(.ascx 文件)中,并且为用户控件设置缓存功能,这就是 “控件缓存” 。设置控件缓存的实质是对用户控件进行缓存配置
  • 一种是 “缓存后替换” ,该方法与控件缓存正好相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次请求该页面时,将重新处理那些没有设置为缓存的内容

应用程序数据缓存

  页面输出缓存和页面部分缓存可以将页面整体或者其中的部分存储到内存中

  • 应用程序数据缓存的主要功能时在内存中存储各种与应用程序相关的对象。通常这些对象都需要耗费大量的服务器资源才能创建。因此,对这些对象实施缓存,无论是对服务器还是对用户都有着明显的好处
  • 应用程序数据缓存是易失的,当服务器内存不足时系统会自动让缓存过期,所以使用缓存存储较多数据时必须保证Web服务器的内存足够大

缓存依赖

  缓存依赖是实现缓存功能中非常重要的部分。通过依赖缓存,可以在被依赖对象(如文件、目录、数据库表等)与缓存对象之间建立一个有效的关联。当被依赖对象发生变化时,缓存对象将变得不可用,并被自动从缓存中移除

  • 通过缓存依赖的设置既提高了应用程序的响应,减轻了服务器的负担,同时也让用户浏览时看到的数据总是实时的、最新的

应用程序缓存移除回调

  缓存中的数据会因为各种原因而被移除,在某些情况下需要在缓存移除时将缓存中的数据转存到其他的地方一方数据丢失,或是在缓存移除时做一些处理,这时就需要实现缓存移除回调。缓存移除回调就是对缓存的回调函数进行编码以实现既定的需求

  • 缓存移除回调委托的语法如下:
public delegate void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason);
  • key 表示要移除的缓存的键对象
  • value 就是缓存的值对象
  • reason 代表缓存移除的原因,有以下 4 种可能:
    • CacheItemRemovedReason.Removed —— 通过代码移除
    • CacheItemRemovedReason.Underused —— 内存不足,系统自动移除
    • CacheItemRemovedReason.Expired —— 缓存过期移除
    • CacheItemRemovedReason.DependencyChanged —— 依赖改变移除

具体实现方式下次更 😃😃😃