|
|
51CTO旗下网站
|
|
移步端
  • 细说.NET的七种缓存

    在档次支出中缓存可以说是一直的生活,但是缓存技术具体该怎么用用在哪儿,对于绝大多数开发人员来说并不知晓,甚至有些开发人员认为缓存使用过于复杂。这就是说通过这篇文章各位读者可以从容了解缓存的采取和规律。

    笔者:朱钢 来源:51CTO| 2020-01-14 08:00

    【51CTO.com原创稿件】在档次支出中缓存可以说是一直的生活,但是缓存技术具体该怎么用用在哪儿,对于绝大多数开发人员来说并不知晓,甚至有些开发人员认为缓存使用过于复杂。这就是说通过这篇文章各位读者可以从容了解缓存的采取和规律。

    一、什么是缓存

    1. 缓存能干什么

    缓存可以增进系统性能、增长稳定性和可用性。同样缓存也得以减少交互的通信量、降低系统处理量和降低磁盘开销。下我针对前面所说的情节从六枝进行一番简单的概述。

  • 增长系统性能:名将数据缓存起来避免数据重复处理和传输,普通我们会将扭转很少的多寡存储在缓存中,比如国家、省份和都市名称;

  • 增长稳定性:在大量请求对同一个数目或者逻辑多次调用时会造成很大的风源浪费,甚至会造成系统不安宁。这会儿我们可以将这些资源缓存起来,每次请求时都副缓存中读取,这样就加强了系统之祥和;

  • 增长可用性:顶数据系统服务出现问题时,穿过缓存可以持续向请求端提供多少服务,只不过这时的多寡有可能是过时的;

  • 调减通信量:缓存数据能有效减少在经过和机械间的传导量;

  • 降低处理量:名将处理好的多寡缓存起来,可以避免同样的多寡二次拍卖;

  • 降低磁盘访问次数:名将数据缓存起来,每次需要多少时先走访缓存,如果存在就返回缓存的多寡,如果不存在那么就访问存储在光盘上的多寡。穿过这种操作可以有效的狂跌磁盘的供给量。

    1. 缓存状态

    所谓缓存状态是运用体系在一番时间点上数据的状态,该署数据有可能是持久化到必发娱乐登录中,也有可能是暂时存储在内存中等等。在这一小节里我们将学习到缓存生命周期、规模和陈旧数据如何处理。

  • 缓存生命周期

  • 缓存生命周期一共有四种,离别如下表:   

    生命周期 表明
    Permanent State
    世代有效:数量永不过期,数量永久存在
    Process State
    经过有效:在经过有效的生命周期内数据有效
    Session State
    对话内有效:在一定的对话内数据有效
    Message State
    信息内有效:在拍卖特定消息的时间段内有效

  •  缓存范围
  • 缓存是有规模之,总结起来说缓存范围包含两大类:物理范围和逻辑范围。这两个范围内又包含了不同之详细范围。现实如下:

  • 物理范围 

  • 规模 表明
    Organization
    在集体内所有应用都得以访问缓存
    Farm
    在应用场范围内所有的机械都得以访问缓存
    Machine
    在一番机械内可以访问缓存
    Process
    在一番用到进程内可以访问缓存
    AppDomain
    在一番用到域内可以访问缓存

  • 逻辑范围   
  • 规模 表明
    Application
    在一番用到进程内可以访问缓存(同 Process)
    Business Process
    在一定业务流程内可以访问缓存
    Role
    一定角色可以访问缓存
    User
    一定用户可以访问缓存

  • 缓存陈旧数据处理
  • 缓存是数量的快照,但是由于数据源可以把修改,故此缓存就存在陈旧的性状。采取这个特性将数据陈旧的负面影响最小化是缓存状态数据的一个重要职责。普通我们从如从两个地方来定义哪些数据是陈旧数据:

  • 东道主数据更改的可能:时光越长主数据被修改的可能就越大,故此我们可以设置时间点来更新缓存数据;

  • 旧数据的影响程度:缓存数据不更新或更新不及时是否对全部系统或者核心业务有影响。

  • 根据上面的两个专业,咱们将缓存数据的可接收程度定义为容忍度,容忍度分为无法容忍和稳定水平容忍。所谓无法容忍,就是当主数据更新时缓存数据必须马上更新。而稳定水平的控制力是指允许在固定时间段内缓存数据和东道主数据不同。

    1. 应考虑的东西

    在采取缓存时,咱们应从 5 个地方考虑:

  • 逾期策略:定义缓存数据多久失效、在什么情况下失效;

  • 竞争性:如何保证缓存的多寡不把其他没有权限的经过、办法访问;

  • 管理:定义缓存的最大容量、逾期策略和清理策略等;

  • 数据格式与访问方法:慎选线程安全、可序列化和可规模化的内存方案以及方法;

  • 情节加载:情节如何加载,是在利用程序启动时就提前加载,还是使用到时先下东数据获取数据,后再放在缓存里。

  • 二、.NET 中的缓存

    .NET 中的缓存有七种,离别是:Asp.net 缓存、 Remoting Singleton 缓存、 Memory-Mapped File 、SQL Server 缓存、静态变量缓存、 Asp.net session state 和 客户端缓存 。下我分别来详细讲解一下。

    1. Asp.net 缓存

    对于 Asp.Net 付出人员来说,经常需要把实用数据存储到内存中。办法无非就是三种,其中最常用的是 Session 目标Application 目标 。这两种方法都是以键值对的样式缓存数据。他俩之专门区别是 Session 目标保存的是和单个用户有关的多寡,而 Application 目标存储的是和运用程序有关的多寡,每个用户都得以访问。除了这两种办法,还有另一种办法不是很常用,但是要比上述措施方便。其一艺术就是 Cache 目标 ,他是 Asp.Net 官方唯一用于缓存数据的,他的使用范围是全体应用程序域。生命周期和运用程序一样,顶应用程序启动时 Cache 目标创建,顶应用程序关闭时 Cache 目标也随之消失。他具有专门用于缓存管理的性状,下我们就来看一下 Cache 的教授(Session 目标 和 Application 目标 因为用之较多因此这里不讲解)。 Cache 目标位于命名空间 System.WebCaching 官方,他除了可以存储键值对外,还可以存储 .NET 框架的目标。普通情况下我们采用 HttpContext 类的 Cache 属性或 Page 目标的 Cache 属性来得到 Cache 的引用。咱们采用 Cache 时首先需要考虑的是依托和过期策略。 Asp.Net 中的依赖和过期策略包含如从两种:

  • File Dependency :文件依赖,顶硬盘上的一个或多个文件更改时,强制移除缓存数据。

  • 基于时间之逾期策略:按照预先定义之年华策略使数据失效,数可以是绝对时间,也得以是相对时间。

  • Tip:

    1. Cache 目标根据缓存项的优先级来决定先移除哪些缓存数据,可以在代码中指定缓存项的优先级。指定优先级使用 CacheItemPriority 枚举项中的值。

    2. Asp.Net 不提供缓存的刷新,但是我们可以运用 Response.Cache.SetExpires 办法设置数据失效日期为眼前日期,就足以刷新缓存了。

    在 Asp.Net 官方我们也得以拓展输出缓存,进出口缓存主要用于缓存页面。名将页面请求的呼唤放入缓存中,自此对这个页面的呼吁就会从从缓存中拥有。咱们可以通过添加 Page 指令来促成,也得以通过 HTTPCachePolicy 类来促成。在我们缓存页面的时节需要考虑如下几个地方:

  • 经常被请求但不转移的常态页面;

  • 创新频率和时间已知的页面(如显示股票价格之页面);

  • 根据HTTP数,有几个可能输出的页面(如根据城市之商标显示该城市天气情况之页面);

  • 副Web Service回到的结果。

  • 有时存储整个页面会导致内存使用过大,此刻就应当使用页面片断缓存技术。但是页面片段缓存技术并不是另外时候都选用,只有如下几种情景适用:

  • 多个用户使用的页面片断;

  • 包含静态数据的页面片断;

  • 付出很大的页面片断;

  • 多个页面共同使用的页面片断。

    1. Remoting Singleton 缓存

    .Net 提供了跨应用程序域、跨进程以及跨计算机的顺序运行框架。传感器激活对象中 Singleton 品种任何时候都不会同时具有多个规矩。在运行过程中如果存在实例,整整客户端请求都由该实例提供服务。如果不存在,传感器将创造一个实例,整整的后继请求都将由该实例来提供服务。

    1. Memory-Mapped File

    Memory-Mapped File 兴许利用程序通过指针来访问磁盘上的公文。这种方式在多个应用程序共享内存时,系统之性质会有显著提升。基于 Memory-Mapped File 的内存方案可以用在利用程序的每股层中,只不过由于采取 win32 API 租用,故此 只能以非托管代码的措施运行。

    1. SQL Server 缓存

    名将缓存的多寡存储在必发娱乐登录里也是适用的主意,他的长处如下:

  • 轻而易举实现;

  • 圆满的平安模型和很高的健康性;

  • 富有的共享;

  • 慎始而敬终保留;

  • 支持大数量量。

  • 当然,缺点也是有目共睹的:

  • 要求安装SQL Server,对小型应用来说不适合;

  • 重新构造数据的性质和读取必发娱乐登录的性质比较;

  • 网络负担大。

    1. 静态变量缓存

    名将数据存储器声明为病态变量,并且提供保障接口,出于是在内存中,这种方案可提供对缓存数据的直接、很快的走访,顶没有代表方案解决键值对的存储且对速度要求很高时,可以运用静态变量。采用这种方式保存的目标前提是他不经常更改,但是由于没有清理缓存机制,故此这种方式会造成很高的性质开销,并且还要保证线程安全。故此该方法不推荐使用。

    1. Asp.net session state

    基于HttpSessionState目标的asp.net session state来缓存单个用户之对话状态信息,消灭了asp官方会话状态的许多限制。Asp.net session state有三种操作模式:

  • 经过内模式InProc:

  • 经过内模式是绝无仅有支持Session_End事件的session分立式,顶用户会话超时或中止时,可以运行Session_End中的事件处理代码来清除资源。但是在 web 使用中 aspnet_wp.exe 的多个规矩在同一台服务器上运行,故此进程内模式不适用 web 使用。

  • 经过外模式State Server:

  • 该模式使用指定的经过储存状态信息,采用该模式要保证你存储的目标是可序列化的。在 web 使用中采用时,必须保证 web.config 文件中的 <MachineKey> 元素在一切服务器上是绝无仅有的。这样一切的蒸发器使用同 样的增值方式,才能走访缓存中的数据。

  • SQL server分立式:

  • 该模式类似于 SQL Server 缓存 ,此地不多讲解。

    1. 客户端缓存

    采用客户端存储页面信息的措施来降低服务器的承受,虽然具有最低的平安保护和最简单的多寡量,但却有最快的性质。公用的客户端缓存方法有如下五种:

  • Hidden Field

  • 该方法也就是所谓的隐藏域,在页面中放置一个 <input type="hidden"/> ,在伊 value 属性中存入需要缓存的值。这样做的长处是会和外部单一起提交,而且所有浏览器都支持并且和劳务端无关。但是同样也具有缺点,不安全,任何人都得以修改,而且存储结构化数据不方便,情节很多时会出现性能问题。

  • View State

  • 这种方式和 Hidden Field 办法一样,只不过这种方式对存储的多寡进行了加密,但是同样具有 Hidden Field 的弱点。

  • Hidden Frame

  • 采用Hidden Frame,避免了动用hidden field和利用view state时每次页面回送时的内存数据往返,优点是可以加载大量数目,可以缓存多个不同之多寡。症结同样也很难,第一很多浏览器已经初步不支持 Frame 了,而且客户端可以看出隐藏的 Frame,并且大量之 Frame 会造成页面加载很慢。

  • Cookies

  • Cookies 也得以存储缓存数据,可以很红火的存储到客户端浏览器中,并且支持过期策略,但是缺点也很显然。第一容易把篡改,并且可存储的 Cookie 多少有限,而且客户端很有可能拒绝 Cookie 。

  • Query String

  • 这种方式只可以在采取 HTTP GET 办法调用URL时采用,劳务端可直接读取,而且所有浏览器都得以运用,但是因为是在 URL 官方表现出来,故此很容易把篡改,而且有长度限制,字符不能超过 255个字符。

    三、总结

    穿过上述的教授,相信大家已经知道了缓存的采取,咱们在采取时应注意运用的面貌和利用的主意。

    笔者介绍:

    朱钢,笔名喵叔,境内某技术博客认证专家,.NET尖端开发工程师,7年一线开发经历,参与过电子政务系统和AI客服系统之支出,以及互联网招聘网站的架构设计,脚下就任于一家初创公司,转业企业级安全监控系统之支出。

    【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

    【义务编辑: 庞桂玉 TEL:(010)68476606】

    点赞 0
  • .NET  缓存  编程语言
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    Python使用场景实战手册

    Python使用场景实战手册

    Python使用场景实战手册
    共3章 | KaliArch

    115人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    182人口订阅学习

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    131人口订阅学习

    读 书 +更多

    Linux空气下C编程指南

    该书系统地介绍了在Linux平台下用C语言进行程序开发的经过,穿过列举大量之顺序实例,使读者很快掌握在Linux平台下开展C先后开发的主意和技...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微


        1.