软件层面缓存基本概念与分类

这篇具有很好参考价值的文章主要介绍了软件层面缓存基本概念与分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

缓存

缓存基本概念(百度百科)

缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
RAM(Random-Access Memory)和ROM(Read-Only Memory)相对的,RAM是掉电以后,其中的信息就消失那一种,ROM在掉电以后信息也不会消失那一种。RAM又分两种,一种是静态RAM,SRAM(Static RAM);一种是动态RAM,DRAM(Dynamic RAM)。前者的存储速率要比后者快得多,使用的内存一般都是动态RAM。为了增加系统的速率,把缓存扩大就行了,扩的越大,缓存的数据越多,系统就越快了,缓存通常都是静态RAM,速率是非常的快, 但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍), 价格高(同容量的静态RAM是动态RAM的四倍), 由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为, 但是为了提高系统的性能和速率,必须要扩大缓存, 这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存, 这些高速动态RAM速率要比常规动态RAM快,但比原来的静态RAM缓存慢, 把原来的静态RAM缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。
硬盘的缓存主要起三种作用:
预读取
写入
临时存储

1、读取顺序
CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。
正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存。
2、缓存分类
Intel从Pentium开始将Cache分开,通常分为一级高速缓存L1和二级高速缓存L2。在以往的观念中,L1 Cache是集成在CPU中的,被称为片内Cache。在L1中还分数据Cache(D-Cache)和指令Cache(I-Cache)。它们分别用来存放数据和执行这些数据的指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。
3、读取命中率
CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache,在拥有L3 Cache的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

web缓存

数据库缓存

数据库在速度和吞吐量方面的表现是对应用程序整体性能最有影响力的因素。尽管目前许多数据库都可以提供相对较高的性能,但在很多使用案例中,您的应用程序可能需要更高的性能。借助数据库缓存,您可以显著提高吞吐量,降低与后端数据库相关的数据检索延迟,从而提高应用程序的整体性能。缓存充当邻近数据库的数据访问层,而应用程序可以利用它来提高性能。数据库缓存层可以应用于任何类型的数据库(包括关系数据库和 NoSQL 数据库)的前端。将数据加载到缓存中的常用方法包括延迟加载和直写式方法。

为什么要用数据库缓存

我们知道常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且粒度也太小,一般只有表中数据没有变更的时候,数据库对应的cache才发挥了作用。但这并不能减少业务系统对数据库产生的增、删、查、改的庞大IO压力。所以数据库缓存技术在此诞生,实现热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力。

两数据库缓存技术

用于数据库缓存场景的开源技术,那必然是memcache和redis这两个中间件。
memcache :支持简单数据类型,不支持数据持久化存储,不支持主从、不支持sharing(代码层次通过hash可以实现)
redis : 数据类型丰富,支持set、list等类型| 支持数据磁盘持久化存储|支持主从,支持sharding(redis 3.0开始支持)
因为都是专注于内存缓存领域,memcache和redis向来都有争议。比如性能,到底是memcache性能好,还是redis性能更好等。同样都是内存缓存技术,它们都有自己的技术特性。没有更好的技术,只有更合适的技术。个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择redis。其他简单的key/value存储,选择memcache。所以根据自身业务特性,数据库缓存来选择适合自己的技术。

服务器端缓存

服务器端缓存包含代理服务器缓存和CDN缓存:

代理服务器缓存

代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见代理服务器缓存解决方案有Squid等

CDN缓存

CDN(Content delivery networks)缓存,也叫网关缓存、反向代理缓存。CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展并获得更好的性能。浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。虽然这种架构负载均衡源服务器之间的缓存没法共享,但却拥有更好的处扩展性。从浏览器角度来看,整个CDN就是一个源服务器。

浏览器端缓存

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户。

Web应用层缓存

应用层缓存指的是从代码层面上,通过代码逻辑和缓存策略,实现对数据,页面,图片等资源的缓存,可以根据实际情况选择将数据存在文件系统或者内存中,减少数据库查询或者读写瓶颈,提高响应效率。

会话管理

HTTP 会话包含站点用户与 Web 应用程序之间交换的用户数据,例如登录信息、购物车清单、先前查看过的项目等等。要在网站上提供优质的用户体验,必须记住用户的喜好并提供丰富的用户上下文,从而有效地管理 HTTP 会话。在现代应用程序架构中,利用集中式会话管理数据存储是一种理想的解决方案,原因包括可以在所有 Web 服务器上提供一致的用户体验、弹性的 Web 服务器队列可以实现更好的会话持久性以及在缓存服务器之间复制会话数据可以提供更高的可用性。

一般缓存

从内存访问数据的速度远远高于从磁盘或 SSD 访问数据的速度,因此利用缓存中的数据有很多优势。对于不要求事务数据支持或基于磁盘的持久性的许多使用案例而言,将内存键值存储用作独立数据库是构建高性能应用程序的一种好方法。除了速度以外,应用程序还可以实现经济高效的高吞吐量。产品分组、类别列表和资料信息等可以引用的数据都适合使用一般缓存

集成缓存

集成缓存是位于内存中的一个层,可以自动缓存源数据库中频繁访问的数据。如果数据保存在缓存中,底层数据库通常会利用缓存来响应入站数据库请求。这可以降低请求延迟并降低数据库引擎的 CPU 和内存使用率,从而显著提高数据库的性能。缓存的数据与数据库引擎在磁盘上存储的数据保持一致,这是集成缓存的一项重要特征。文章来源地址https://www.toymoban.com/news/detail-696134.html

到了这里,关于软件层面缓存基本概念与分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试开发的基本概念

                                        今天的这个知识比较少,我们来看看 测试和调试的区别 1.目的不同 测试的任务是发现程序中的缺陷; 调试的任务是定位并且解决程序中的问题。 2.参与角色不同 测试主要是由测试人员和开发人员来执行,黑盒测试主要由测试人员完成

    2023年04月08日
    浏览(55)
  • SDN(软件定义网络)基本概念

    SDN(Software Defined Network)是“软件定义网络”的缩写,它是一种网络架构和技术,旨在将网络控制器与数据转发分离开来,以提高网络管理的灵活性和可编程性。传统的网络架构中,网络控制器和数据转发通常是耦合在一起的,而SDN通过将它们分离,可以使网络管理员更轻松

    2024年02月06日
    浏览(45)
  • 【软件测试】软件测试的基本概念和开发模型

    在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 软件测试的基本概念有3个,分别是 需求,测试用例和BUG. 这里的需求还可以分为 用户需求和软件需求 ,用户需求: 简单理解为甲方提出的需求

    2023年04月15日
    浏览(123)
  • Autosar MCAL软件架构基本概念

    MCAL 架构介绍 Autosar整体架构图如下所示: MCAL是MicroController Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层,是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系

    2024年02月01日
    浏览(42)
  • 深入解析Spring基本概念和核心思想

    使用spring后,被spring管理的类,不需要再new。 要想类被spring管理,则需要通过bean的方式,把类引入到spirng的配置文件中。 Ioc容器 简单的理解就是: 实现IoC思想,并提供对象创建,对象装配以及对象生命周期管理的软件就是Ioc容器 IoC理解 应用程序无需主动new对象,而是描述

    2024年02月12日
    浏览(46)
  • 万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)

            MySQL 是一个关系型数据库管理系统,可以从不同的层面进行优化以提高系统的性能和效率。下面就是从 系统设计层面、软件层面、SQL层面的一些优化建议 。优化 MySql 可以从减轻数据库压力、提高配置、提高查询效率等方面入手。 采用分布式架构        如果单

    2024年01月22日
    浏览(51)
  • 深入浅出 Spring:核心概念和基本用法详解

    个人主页:17_Kevin-CSDN博客 收录专栏;《Java》 在 Java 企业级应用开发中,Spring 框架已经成为了事实上的标准。它提供了一种轻量级的解决方案,使得开发者能够更轻松地构建灵活、可扩展的应用程序。在本文中,我们将探讨 Spring 框架的一些核心概念和基本用法,以此更好地

    2024年03月20日
    浏览(57)
  • 0008__浏览器层面缓存 Etag & If-None-Match等详解

    浏览器层面缓存 Etag If-None-Match等详解_if-none-match:_shadow_zed的博客-CSDN博客

    2024年02月12日
    浏览(50)
  • Redis学习(一)数据类型、Java中使用redis、缓存概念

    List可以看做是一个双向链表结构,既可以支持正向检索,也可以支持反向检索。 链表的特点是插入和删除效率快,常用来存储有序的、需频繁插入和删除的数据,例如朋友圈点赞列表,评论列表等。 注意:这里的set是无序的! keys:查看符合模板的所有key del:删除一个key,

    2024年02月13日
    浏览(37)
  • 微服务学习笔记-基本概念

    微服务 是一种经过良好架构设计的 分布式架构方案 。根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包