微服务实战系列之Cache

前言

欢迎来到Cache(缓存)的世界!

自从世界第一台计算机诞生之日起,人们对效率的渴望逐步增强。从CPU到存储,从芯片到内存,一批又一批的先驱以一种孜孜不倦的"工匠"精神,为计算机运行效率的提升做出了不可磨灭的贡献。从而也为世界各国计算机的快速发展和普及铺平了道路,迎来了发展的春天!

本期主题,博主带着大家了解Cache,进而掌握如何使用Cache

首先,按惯例,请允许微服务大家族成员前来报到。如有需要请回看,欢迎三连:

提到Cache,各位盆友,可联想到什么?

  • A. redis
  • B. cookie
  • C. ehcache
  • D. memcache
  • E. 其它

欢迎开始今天的旅程,允许博主带着各位盆友"逛一逛",探一下Cache的内幕。


一、Cache简介

首先我们看一下,什么是缓存:

缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。
L1 Cache(一级缓存)是CPU第一层高速缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般L1缓存的容量通常在32---256KB。
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速率与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,普通台式机CPU的L2缓存一般为128KB到2MB或者更高,笔记本、服务器和工作站上用CPU的L2高速缓存最高可达1MB-3MB。由于高速缓存的速度越高价格也越贵,故有的计算机系统中设置了两级或多级高速缓存。紧靠CPU的一级高速缓存的速度最高,而容量最小,二级高速缓存的容量稍大,速度也稍低。------百度百科

这是一段来自百科的标准定义,翻译成通俗的语言,大致是:

Cache是用于临时存储频繁使用的数据的存储 空间。

因此它具备几个特征:

1. 占内存
2. 多层级
3. 速度快
4. 体验佳

接下来,博主带着各位盆友对Cache的核心内容进行初步的剖析。

二、Cache核心

1. 数据共享

为什么数据共享?

那还要借上图加以说明:

在计算机组成结构中,数据读取大致遵循依次CPU--->缓存--->内存--->硬盘路线,当然成本逐步降低,效率也会变的渐行渐远。

因此,缓存数据不能太多,多而不美,也就失去了缓存的意义。

所以,我们在设计缓存的时候,一定考虑Hit(命中率),合理定义哪些属于高热数据。

2. 多层级

多层级什么概念?

根据服务的执行时序,在每个"关卡"设置缓存,达到综合利用资源的目的。

比如浏览器/客户端设置缓存;

比如web前端设置缓存;

比如后端服务设置缓存;

又比如,我们在架构设计时,可以考虑两级缓存等等。

3. 一致性

为什么考虑一致性?

因为缓存是缓存,数据是数据,操作有先后,结果分轻重。

如果缓存设计不佳,各种千奇百怪的问题就出现了,比如"幻读"等。那如何解决一致性问题呢?通常有几种策略:

  • 缓存失效

数据更新后,主动将缓存失效,下次请求时,重新load缓存,此乃最简单的策略。

  • 广播更新

在分布式系统中,我们常常最头疼的问题是如何发送消息,因此MQ也成了微服务中常见的组件。所以当数据更新后,可以通过MQ发布订阅消息,由各节点接收订阅并刷新缓存。此策略适用于异步交互场景。

  • 读写互斥

数据更新,有且仅有一个线程在操作。通过引入锁机制完成。此策略可能遇到性能问题。

  • 延迟刷新

与缓存失效策略相比,时间延后,但可能带来数据的延迟问题。

4. 时效性

缓存具备时效性,结合命中率,设计缓存时,应合理定义缓存的过期时间。通常与业务场景有关,需要加以鉴别。


结语

综上,博主针对Cache的基础,进行了初步的介绍。所谓平地起高楼,基础尤重要

理解了缓存的定义,就能够合理使用它。

好了,博主今日到此为止,下期再见!

相关推荐
星辰徐哥7 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
大囚长7 小时前
大模型API的上下文缓存(Contextual Cache)
人工智能·缓存
小短腿的代码世界7 小时前
Qt D-Bus深度解析:跨进程通信高级架构与源码实现
qt·架构·系统架构
名不经传的养虾人7 小时前
从0到1:企业级AI项目迭代日记 Vol.44|功能建好,和功能接通,是两件完全不同的事
人工智能·架构·agent·ai编程·企业ai
:mnong7 小时前
学习模型驱动架构和图灵完备运行环境
架构
武子康7 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
小二·7 小时前
Redis 7 分布式缓存架构实战
redis·分布式·缓存
heimeiyingwang7 小时前
【架构实战】分布式会话:从Session到JWT的演进
微服务·云原生·架构
lulu12165440789 小时前
大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
java·人工智能·安全·架构·ai编程
wb043072019 小时前
仓库搬家不停业——从阿明的“在线换仓库“,看数据库迁移与 Schema 演进的实战方法论
数据库·adb·架构