高并发缓存策略大揭秘:面试必备的缓存更新模式解析
source link: https://www.51cto.com/article/783660.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
高并发缓存策略大揭秘:面试必备的缓存更新模式解析
在高并发场景中,缓存能抵挡大量数据库查询,减少数据库压力,对于缓存更新通常有以下几种模式可以选择:
• cache aside
• read/write through
• write behind caching
cache aside模式
Cache-aside模式是一种常用的用于管理缓存的模式。它用于确保缓存与底层数据源之间的数据一致性。以下是cache-aside模式的工作原理:
图片1. 从缓存读取:当有读取操作请求时,应用程序首先检查缓存中是否存在数据。如果在缓存中找到了数据,则将其返回给调用者,避免了访问底层数据源的需要。
2. 缓存未命中:如果在缓存中未找到数据,则表示缓存未命中。在这种情况下,应用程序从底层数据源检索数据,并将检索到的数据填充到缓存中。
3. 更新数据:当对数据执行写入或更新操作时,应用程序首先更新底层数据源中的数据。然后,清除缓存中的数据,以确保下一次读取从数据源中检索到更新后的数据。
通常写缓存和写数据库是两个独立的事务,选择先更新缓存还是先更新数据库都有可能产生数据不一致的情况。
先删缓存,再更新数据库的问题
假设有两个请求A、B。
• 请求A先删除缓存,此时还未更新数据库
• 请求B查询缓存未命中,然后查询数据库,查出旧数据写入缓存
• 请求A继续将数据写入数据库
• 此时缓存与数据库中的数据出现了不一致的情况
将缓存更新不做删除的问题
• 请求A先更新了数据库
• 请求B更新了数据库,并更新了缓存
• 请求A最后更新缓存,此时请求A的数据是脏数据。
先更新DB再失效缓存问题
先更新DB,再失效缓存也会出现问题。
• 请求A读取缓存未命中,查询数据库成功查到数据
• 请求B进来更新数据库成功,并删除缓存数据
• 请求A将查询的数据写入到缓存中,此时请求A写入缓存的数据已经是脏数据
read/write through模式
cache aside模式需要应用方维护缓存的读写,对数据和缓存的维护设计侵入代码,代码复杂性增加。read/write through模式弥补了这一问题,调用方无需管理缓存和数据库调用,通过抽象缓存管理组件维护缓存和数据库的读写,解耦业务代码。
read through模式
当客户端请求一个数据时,如果缓存中不存在该项(缓存未命中),缓存系统会自动从后端存储中加载数据,然后将其添加到缓存中,并返回给客户端。对于后续的相同请求,数据则直接从缓存中获取,直到缓存过期或被淘汰。
图片write through模式
在write-through模式中,当客户端更新一个数据项时,缓存系统会同时更新缓存和后端存储。这意味着所有的写操作都会同步地写入缓存和存储,确保二者的数据一致性。
图片write behind caching模式
Write Behind模式和Write Through模式整个架构是一样的,核心在于write through在缓存数据库中的更新是同步的,而Write Behind是异步的。
每次的请求写都是直接更新缓存然后就成功返回,并没有同步把数据更新到数据库。而把更新到数据库的过程称为flush,触发flush的条件可自定义,如定时或达到一定容量阈值时进行flush操作。并且可以实现批量写,合并写等策略,也有效减少了更新数据的频率,这种模式最大的好处就是读写响应非常快,吞吐量也会明显提升。这种模式也有其他的问题,比如数据不是强一致性的,因为把最新的数据放在缓存里,如果缓存在flush到数据库之前宕机了就会丢失数据,另外实现也比较复杂。
几种模式对
模式 | 优点 | 缺点 |
Cache Aside | 实现比较简单 | 需要应用程序负责缓存的读取和写入操作,代码侵入较大 |
Read/Write Through | 引入缓存管理组件,缓存和数据库的维护对应用程序透明;应用代码入侵小,逻辑更清晰 | 引入缓存管理组件,实现更复杂 |
Write Behind Caching | 读写直接和缓存交互,异步批量更新数据 |
Recommend
-
35
这篇文章,我们聊聊大量同学问我的一个问题,面试的时候被问到一个让人特别手足无措的问题:你的系统如何支撑高并发?
-
5
首发:Canva设计圣诞节作为每年最重要的几大营销节点之一,是大促销和活动宣传的好时机,绝对不能错过!今天这份圣诞节借势攻略,请收下~
-
27
点击关注" 爱笑的架构师 " 右上角菜单" 设为星标 "你会吗? 在大型系统中,为了减少数据库压力通常会引入缓存机制...
-
6
可转债策略大比拼 - 集思录 过去这一个多月可转债分化很大,不少人产生了疑问:到底什么策略最好?为了回答这个问题,本文基于大数据回测,对低价、双低、低溢价、溢价偏离4个可转债策略给出评价,相信看完你就有了答案。
-
5
有人预测GPT-4长这样:比GPT-3略大、纯文本、更注重最优计算与对齐-51CTO.COM 有人预测GPT-4长这样:比GPT-3略大、纯文本、更注重最优计算与对齐 作者:我在思考中 2022-04-20 10:47:46 近日,Ca...
-
4
品牌推广策略大揭秘:从受众到营销,教你如何有效提升品牌知名度和美誉度 品牌营销 ...
-
6
当前位置: 首页 全部 网络...
-
4
不同行业的全网营销策略大揭秘:提高知名度与销售额的有效途径 品牌营销 ...
-
5
苹果在造车上的战略调整,是基于对AI战场的思考,以及微软,谷歌在AI智能设备,包括笔电产品,平板产品,手机产品,网络应用等的布局,对苹果形成了压力。而如果苹果商标的数码消费品没有足够强悍的AI能力,就会失去产品竞争力,而这是苹果的...
-
0
记者丨张飞涛 见习生丨屠玲 出品丨鳌...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK