返回顶部
首页 > 资讯 > 前端开发 > VUE >如何理解缓存
  • 366
分享到

如何理解缓存

2024-04-02 19:04:59 366人浏览 薄情痞子
摘要

这篇文章主要介绍“如何理解缓存”,在日常操作中,相信很多人在如何理解缓存问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解缓存”的疑惑有所帮助!接下来,请跟着小编一起来学

这篇文章主要介绍“如何理解缓存”,在日常操作中,相信很多人在如何理解缓存问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解缓存”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在计算机世界中,缓存(caching)就是将数据子集储存到一个具备高度可访问性的高速运行层的过程,这一层被称作高速缓冲存储器(cache)。

此过程旨在快速读取使用率较高的数据,避免在存取之前的数据时产生额外的计算负担。缓存只能储存数据一小段时间,这是权衡容量后的选择,以此换取更高的运行速度。

如何理解缓存

像随机存取存储器(RAM)和内存存储引擎这类在缓存层下的硬件能够实现快速存取,它们通常和软件层一起被用于访问数据。缓存基本上分为两种:本地缓存和远程缓存。本地缓存依靠JVW(Java虚拟机)堆进行储存,而远程(或集群)缓存使用内存存储器,如Redis和Memcached。

什么是堆内本地缓存?

堆内缓存指把数据存储于Java堆中,在这里数据由垃圾收集器(GC)自动管理。

堆内缓存的优点:

  • GC会自动分配和释放对象

  • 访问数据的速度更快

堆内缓存的不足:

  • GC停顿多发

  • 因为数据被存储于JVM存储器之中,如果JVM崩溃了,数据就会丢失。因此无法长期缓存。

什么是堆外本地缓存?

堆外缓存指把数据存储在堆外。垃圾收集器不会自动处理这些数据,因为数据被存储在Java堆外,所以它们以字节数组存储,因此也存在把数据序列化和反序列化的额外运行负担。

堆外缓存的优点:

  • 允许大量数据的缓存且无须担心GC停顿

  • JVM崩溃后支持在存储器中添加持久层以恢复数据

  • JVM之间可共享缓存数据

堆外缓存的不足:

  • 数据的序列化和反序列化是使用堆外缓存时最大的不便之处。这会为下层程序带来计算负担。因为没有共同的数据结构,把序列化的数据转换成单独对象将付出额外的成本。

  • 短期数据更适合堆内缓存,因为它允许GC自动运行。因而,识别哪些数据可以被归于堆内缓存会带来额外的计算。

  • 手动存储器管理(像存储器分段之类的问题!)

总之,因为堆外缓存能够长期存储大量数据,所以它是存储数据的一种更好方式。再加上大磁盘子系统,就能提高每秒读写次数(ioPS)。

什么是远程缓存?

远程缓存是将数据存储在云端的缓冲区。因为可以在云端检索数据,所以这有助于构建一个更坚固且性能更强的持久层。Redis和Memcached是当下两款大受欢迎的内存缓存产品。

如何理解缓存

远程缓存的优势:

  • 远程缓存集群可以根据需求进行扩展

  • 远程缓存不仅仅局限于单一数据结构,并且它支持多语言编程,因而操作简单。

  • 与磁盘的低速存取相比,性能有所增强(因为数据存储在存储器中,存取数据速度更快)

如何确定系统/服务需要缓存

  • 缓存命中率:如果服务所提供的数据不需要经常刷新且属于经常检索型数据,应当考虑缓存它们。

  • 最终一致性的容限:仔细考虑源数据的变化率,以及缓存的刷新频率。还应该考虑服务对象是否重视最近数据的读取。

缓存策略类型和相应挑战

如何理解缓存

(1) 本地缓存:

通过在服务(比如说哈希表)内使用某种存储方式将使本地缓存的执行更加容易,但也会导致缓存一致性问题。意思就是,不同服务器中的本地缓存不同,这将导致数据不一致。

例如,服务器S1用数据D1响应了请求R1,并把它存储到本地缓存中。如果在数据库中的数据被更新成D2版本,之后R1再次发出相同的请求,则有可能返回数据D1或D2,这取决于请求抵达了哪个服务器。

冷启动也是内存缓存的一个重要问题。因为每一个服务器都是在没有缓存的情况下启动的,随着新服务器的增加,甚至在部署期间,对下游依赖发出的请求数量也会随之变多。这个问题可以通过请求合并解决。

(2) 外部缓存:

  • 能够解决以上问题,因为外部缓存是分开存储的,例如Redis和Memcached。

  • 提供更多存储空间并减少因容量而导致的缓存淘汰。

  • 挑战包括提高整体系统的复杂性和增加更多负载以维护额外的缓存服务器。

  • 始终在服务中添加代码来解决缓存可能不可用的情况。

  • 可以在此期间呼叫下游服务。但如果缓存中断时间过长,可能导致下游服务的负载增加。

  • 或者,外部存储器和内部存储器一起使用可以避免完全回落到下游依赖。

  • 也可以考虑采取减载技术,通过限制服务的请求数量来避免下游服务负载过重。

(3) 应对缓存扩展和弹性问题:

如果缓存达到最大容量,那么需要通过向其添加更多节点来扩展。深入了解系统及其在达到最大容量时的反应(例如,缓存达到最大容量时每个容器的内存利用率上升)有助于设置准确的警报。

这些警报可用于扩展缓存服务。在扩展服务时,需要记住两件事:缓存集群是否支持在没有宕机的情况下添加节点,或者是否支持一致性哈希算法来平衡流量分配。始终确保通过模拟故障来测试扩展策略。

(4) 控制数据的鲁棒性

缓存数据应能够读取更新后的代码格式,而更新后的代码应能够处理缓存所提供的旧版本数据。

缓存实现要点

如何理解缓存

(1) 缓存大小:根据服务中通过的数据类型可以确定缓存大小,以便提高缓存命中率。

(2) 缓存淘汰:这指的是当缓存达到最大容量时,把数据从缓存中移除。缓存淘汰最常见的模式是LRU(最近最少使用)。

(3) 缓存逾期:这是一种确定数据在缓存中的保留时间的策略,具体取决于数据刷新频率或客户处理过时数据的能力。

(4) 下游服务不可用

如果下游服务因为某些原因不可用,缓存服务不应该用更新数据的请求攻击下游,而是能够长期保护缓存,并等待它恢复。根据与客户之间的权衡协调,要么报告缓存中的过时数据,避免请求令下游服务掉线,要么使用一种机制来存储下游服务的错误响应,并对其进行相应的解释说明。

(5) 安全

正在缓存的敏感数据或客户数据的安全性是人们对缓存集群的担忧之一。敏感数据应在存储前加密,并在输入和输出缓存数据的过程中确保其安全性。此外,由于缓存数据的返回速度比从数据库获取的调用速度快,攻击者可以根据响应时间识别服务发出的请求类型,这被称为侧信道时序攻击。

(6) “惊群效应”问题

下游服务不可用时,如果为了从下游服务获取未缓存的数据而发出多个请求,则可能会引发多次重试,进而导致服务掉线。可以结合多个策略来缓解这个情况,例如按客户或请求来进行节流、请求合并(即对相同的未缓存数据只发送一个请求)等。

缓存可以提供更快的数据访问速度和提高下游服务可用性,但它的代价是缓存节点的处理会更加复杂。通过巧妙地理解下游服务的需求,可以得出一个缓存解决方案。在不同的情景中(如流量峰值、缓存不可用、下游服务掉线等)都应当对此解决方案的表现进行仔细监控以调整参数。

到此,关于“如何理解缓存”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何理解缓存

本文链接: https://lsjlt.com/news/83209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解缓存
    这篇文章主要介绍“如何理解缓存”,在日常操作中,相信很多人在如何理解缓存问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解缓存”的疑惑有所帮助!接下来,请跟着小编一起来学...
    99+
    2024-04-02
  • 如何理解Hiberate3 Session缓存
    这篇文章给大家介绍如何理解Hiberate3 Session缓存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Hiberate3有很多值得学习的地方,这里我们主要介绍Hiberate3 Session缓存,包括介绍Li...
    99+
    2023-06-17
  • 如何清理cdn缓存
    清理cdn缓存的方法首先,使用组合键“win+R”运行“cmd”,进入命令提示符界面;进入到命令提示符界面后,在命令行运行以下命令即可查看cdn缓存;ipconfig /displaydns最后,查看到cdn缓存,执行以下命令,即...
    99+
    2024-04-02
  • redis如何清理缓存
    如果你们的项目用到redis啦,虽然设置了过期时间,但有时候修改bug,仍然需要及时清空缓存,去读数据库的数据,所以这篇文章讲解如何清除redis的缓存。 正文 1.首先进到redi...
    99+
    2023-01-04
    redis 清理缓存
  • ssl缓存如何清理
    要清理SSL缓存,可以按照以下步骤进行操作:1. 清理浏览器缓存:在浏览器设置中找到“清除缓存”选项,点击进行清理。具体操作细节可能...
    99+
    2023-08-25
    ssl
  • Redis缓存击穿、缓存穿透、缓存雪崩如何解决
    本篇内容介绍了“Redis缓存击穿、缓存穿透、缓存雪崩如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis缓存使用场景Redis...
    99+
    2023-07-05
  • 如何理解DBMS_RESULT_CACHE管理结果缓存的包
    本篇文章给大家分享的是有关如何理解DBMS_RESULT_CACHE管理结果缓存的包,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle 11g提供了DBMS_RESUL...
    99+
    2023-06-06
  • 如何理解Android图片缓存框架Glide
    本篇文章给大家分享的是有关如何理解Android图片缓存框架Glide,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android图片缓存框架GlideGlide是Google...
    99+
    2023-06-05
  • Metro应用缓存如何清理 图解Win8应用商店缓存文件清理
    Win8应用商店大大方便了用户安装软件,不过Win8应用商店的缓存文件也导致了我们系统C盘剩余空间越来越小,给系统稳定性带来不便,那么如何清理win8商店缓存文件呢?这个相信是不少使用Win8系统比较容易遇...
    99+
    2022-06-04
    缓存 商店 文件
  • 如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题
    这篇文章主要介绍了如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。缓存穿透:key中对应的...
    99+
    2024-04-02
  • Redis中缓存过期、内存被缓存占用要如何处理
    这篇文章主要讲解了“Redis中缓存过期、内存被缓存占用要如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中缓存过期、内存被缓存占用要如何处...
    99+
    2024-04-02
  • 云主机如何清理缓存
    清理云主机缓存可以通过以下几种方法进行:1. 清理内存缓存:使用命令"sudo sh -c 'echo 1 > /proc/sys/...
    99+
    2023-09-13
    云主机
  • win10如何清理缓存垃圾
    本文小编为大家详细介绍“win10如何清理缓存垃圾”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10如何清理缓存垃圾”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10清理缓存垃圾的方法:点击“开始”...
    99+
    2023-07-01
  • linux中如何清理redis缓存
    清理Redis缓存可以通过以下几种方法: 使用Redis自带的命令:可以使用FLUSHDB命令清空当前数据库中的所有数据,或者使...
    99+
    2024-04-02
  • 如何理解Redis缓存之淘汰机制、缓存雪崩、数据不一致
    本篇内容介绍了“如何理解Redis缓存之淘汰机制、缓存雪崩、数据不一致”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • 如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析
    来源:zeb_perfect前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,...
    99+
    2023-06-05
  • 如何解决Redis缓存穿透和缓存雪崩问题
    这篇文章主要为大家展示了“如何解决Redis缓存穿透和缓存雪崩问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Redis缓存穿透和缓存雪崩问题”这篇文...
    99+
    2024-04-02
  • 如何解决redis缓存雪崩
    这篇文章主要介绍如何解决redis缓存雪崩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!redis缓存雪崩怎么解决?缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时...
    99+
    2024-04-02
  • 如何解决Ajax缓存问题
    这篇文章主要介绍“如何解决Ajax缓存问题”,在日常操作中,相信很多人在如何解决Ajax缓存问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决Ajax缓存问题”的疑惑...
    99+
    2024-04-02
  • ajax如何解决缓存问题
    这篇文章主要介绍ajax如何解决缓存问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 这样是为了减少频繁访问服务器对其造成不必要的负担,但是同时也带来...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作