网易首页 > 网易号 > 正文 申请入驻

高并发场景下,到底先更新缓存还是先更新数据库?

0
分享至

在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据。

为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大家踩踩坑。

Cache aside

Cache aside也就是旁路缓存,是比较常用的缓存策略。

(1)读请求常见流程

Cache aside 读请求

应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未命中即缓存穿透到数据库,从数据库查询数据然后回写到缓存中,最后返回数据给客户端。

(2)写请求常见流程

Cache aside 写请求

首先更新数据库,然后从缓存中删除该数据。

看了写请求的图之后,有些同学可能要问了:为什么要删除缓存,直接更新不就行了?这里涉及到几个坑,我们一步一步踩下去。

Cache aside踩坑

Cache aside策略如果用错就会遇到深坑,下面我们来逐个踩。

踩坑一:先更新数据库,再更新缓存

如果同时有两个写请求需要更新数据,每个写请求都先更新数据库再更新缓存,在并发场景可能会出现数据不一致的情况。

先更新数据库,再更新缓存

如上图的执行过程:

(1)写请求1更新数据库,将 age 字段更新为18;

(2)写请求2更新数据库,将 age 字段更新为20;

(3)写请求2更新缓存,缓存 age 设置为20;

(4)写请求1更新缓存,缓存 age 设置为18;

执行完预期结果是数据库 age 为20,缓存 age 为20,结果缓存 age为18,这就造成了缓存数据不是最新的,出现了脏数据。

踩坑二:先删缓存,再更新数据库

如果写请求的处理流程是先删缓存再更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。

先删缓存,再更新数据库

如上图的执行过程:

(1)写请求删除缓存数据;

(2)读请求查询缓存未击中(Hit Miss),紧接着查询数据库,将返回的数据回写到缓存中;

(3)写请求更新数据库。

整个流程下来发现数据库中age为20,缓存中age为18,缓存和数据库数据不一致,缓存出现了脏数据。

踩坑三:先更新数据库,再删除缓存

在实际的系统中针对写请求还是推荐先更新数据库再删除缓存,但是在理论上还是存在问题,以下面这个例子说明。

先更新数据库,再删除缓存

如上图的执行过程:

(1)读请求先查询缓存,缓存未击中,查询数据库返回数据;

(2)写请求更新数据库,删除缓存;

(3)读请求回写缓存;

整个流程操作下来发现数据库age为20,缓存age为18,即数据库与缓存不一致,导致应用程序从缓存中读到的数据都为旧数据。

但我们仔细想一下,上述问题发生的概率其实非常低,因为通常数据库更新操作比内存操作耗时多出几个数量级,上图中最后一步回写缓存(set age 18)速度非常快,通常会在更新数据库之前完成。

如果这种极端场景出现了怎么办?我们得想一个兜底的办法:缓存数据设置过期时间。通常在系统中是可以允许少量的数据短时间不一致的场景出现。

Read through

在 Cache Aside 更新模式中,应用代码需要维护两个数据源头:一个是缓存,一个是数据库。而在 Read-Through 策略下,应用程序无需管理缓存和数据库,只需要将数据库的同步委托给缓存提供程序 Cache Provider 即可。所有数据交互都是通过抽象缓存层完成的。

Read-Through流程

如上图,应用程序只需要与Cache Provider交互,不用关心是从缓存取还是数据库。

在进行大量读取时,Read-Through 可以减少数据源上的负载,也对缓存服务的故障具备一定的弹性。如果缓存服务挂了,则缓存提供程序仍然可以通过直接转到数据源来进行操作。

Read-Through 适用于多次请求相同数据的场景,这与 Cache-Aside 策略非常相似,但是二者还是存在一些差别,这里再次强调一下:

  1. 在 Cache-Aside 中,应用程序负责从数据源中获取数据并更新到缓存。
  2. 在 Read-Through 中,此逻辑通常是由独立的缓存提供程序(Cache Provider)支持。
Write through

Write-Through 策略下,当发生数据更新(Write)时,缓存提供程序 Cache Provider 负责更新底层数据源和缓存。

缓存与数据源保持一致,并且写入时始终通过抽象缓存层到达数据源。

Cache Provider类似一个代理的作用。

Write-Through流程

Write behind

Write behind在一些地方也被成为Write back, 简单理解就是:应用程序更新数据时只更新缓存, Cache Provider每隔一段时间将数据刷新到数据库中。说白了就是延迟写入。

Write behind流程

如上图,应用程序更新两个数据,Cache Provider 会立即写入缓存中,但是隔一段时间才会批量写入数据库中。

这种方式有优点也有缺点:

  1. 优点是数据写入速度非常快,适用于频繁写的场景。

  2. 缺点是缓存和数据库不是强一致性,对一致性要求高的系统慎用。

总结一下

学了这么多,相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。

缓存更新的策略主要分为三种:

  1. Cache aside
  2. Read/Write through
  3. Write behind

Cache aside 通常会先更新数据库,然后再删除缓存,为了兜底通常还会将数据设置缓存时间。

Read/Write through 一般是由一个 Cache Provider 对外提供读写操作,应用程序不用感知操作的是缓存还是数据库。

Write behind简单理解就是延迟写入,Cache Provider 每隔一段时间会批量输入数据库,优点是应用程序写入速度非常快。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
杭州发布主城区台风蓝色预警!凌晨起上城区、西湖区、拱墅区和滨江区所有街道风力逐渐增大,白天最大偏东风7~9级

杭州发布主城区台风蓝色预警!凌晨起上城区、西湖区、拱墅区和滨江区所有街道风力逐渐增大,白天最大偏东风7~9级

鲁中晨报
2026-07-10 21:36:11
王光美有多美?1940年在大学留影,那年19岁,家世显赫,气质不凡

王光美有多美?1940年在大学留影,那年19岁,家世显赫,气质不凡

史之铭
2026-06-23 16:20:57
男篮4人离队!王俊杰赵维伦退出,徐昕加盟NBA球队,杨瀚森不打了

男篮4人离队!王俊杰赵维伦退出,徐昕加盟NBA球队,杨瀚森不打了

绯雨儿
2026-07-10 09:35:24
里子面子都没了!S妈曝光遗产归属后,汪小菲出手撕下大S最后体面

里子面子都没了!S妈曝光遗产归属后,汪小菲出手撕下大S最后体面

阿伧说事
2026-07-10 07:40:04
三大运营商终于作“死”了自己

三大运营商终于作“死”了自己

细雨中的呼喊
2026-06-10 23:49:50
继续增持泡泡玛特,持仓已达153亿港元!段永平最新解释:不在乎短期盈利波动,只努力去想10年20年后会怎么样

继续增持泡泡玛特,持仓已达153亿港元!段永平最新解释:不在乎短期盈利波动,只努力去想10年20年后会怎么样

每日经济新闻
2026-07-10 19:50:08
奥迪宣布下一代内饰不再过度依赖大屏:将重新用回实体按键

奥迪宣布下一代内饰不再过度依赖大屏:将重新用回实体按键

快科技
2026-07-09 09:56:14
陈忠和现状:在福建老家养老,女儿成家立业,30岁儿子仍是单身

陈忠和现状:在福建老家养老,女儿成家立业,30岁儿子仍是单身

手工制作阿歼
2026-07-11 01:11:25
“四时不开窗,家人才健康”,今天才知道:这4个时间不能开窗!

“四时不开窗,家人才健康”,今天才知道:这4个时间不能开窗!

三农老历
2026-07-01 01:28:08
兵力狂飙25倍!美军王牌杀到金门,台海埋暗雷,中美硬刚一触即发

兵力狂飙25倍!美军王牌杀到金门,台海埋暗雷,中美硬刚一触即发

老谢谈史
2026-07-10 10:02:58
全球首创!长征十号乙首飞成功实现海上网系回收,中国商业航天跨过“回收门槛”

全球首创!长征十号乙首飞成功实现海上网系回收,中国商业航天跨过“回收门槛”

每日经济新闻
2026-07-10 13:48:27
上海一家四口疑携多种病毒过境,宝妈自曝:弟弟全程“喷射”

上海一家四口疑携多种病毒过境,宝妈自曝:弟弟全程“喷射”

琴琴有氧运动
2026-07-10 19:01:03
广西大雨炸出一堆“牛鬼神蛇”,捐款名单曝光,韩红热巴让人意外

广西大雨炸出一堆“牛鬼神蛇”,捐款名单曝光,韩红热巴让人意外

趣文说娱
2026-07-08 06:35:21
定了!葡萄牙裁判将执法阿根廷队1/4决赛,欧冠曾造巨大争议

定了!葡萄牙裁判将执法阿根廷队1/4决赛,欧冠曾造巨大争议

全景体育V
2026-07-10 12:27:36
我记住这位英年早逝的经济学家是因为他那句充满悲悯和伤感的话..

我记住这位英年早逝的经济学家是因为他那句充满悲悯和伤感的话..

细雨中的呼喊
2026-07-08 13:30:56
温网女子单打赛中,中国金花12-10逆转胜出,成功晋级决赛

温网女子单打赛中,中国金花12-10逆转胜出,成功晋级决赛

晓囝爱八卦
2026-07-10 11:28:56
帮LV胜诉的中国律所被扒!坑害国企数十年,央媒怒批,吃相太难看

帮LV胜诉的中国律所被扒!坑害国企数十年,央媒怒批,吃相太难看

小莜读史
2026-07-10 20:08:29
邓文迪现身太阳谷峰会!和李在镕伊万卡同框热聊,老钱风穿搭美翻

邓文迪现身太阳谷峰会!和李在镕伊万卡同框热聊,老钱风穿搭美翻

可乐谈情感
2026-07-10 15:56:44
不怕笑话,我同居过三个50岁女人,发现她们找伴就图四件事

不怕笑话,我同居过三个50岁女人,发现她们找伴就图四件事

阿凯销售场
2026-07-11 00:09:34
三观尽毁!萝莉岛新照片流出,办公桌下趴着妙龄女郎,不堪入目!

三观尽毁!萝莉岛新照片流出,办公桌下趴着妙龄女郎,不堪入目!

川渝视觉
2026-02-09 10:43:27
2026-07-11 05:19:00
ITPUB学院
ITPUB学院
分享技术干货,了解最新动态
1251文章数 629关注度
往期回顾 全部

科技要闻

中国开启可回收火箭时代

头条要闻

广西有人抓上百斤蛇 有独居老人窗户几乎被蛇爬满

头条要闻

广西有人抓上百斤蛇 有独居老人窗户几乎被蛇爬满

体育要闻

法国VS摩洛哥:谁才是臭外地的?

娱乐要闻

韩国顶流李钟硕与IU官宣分手!

财经要闻

一封举报信 引发小红书IPO合规考验

汽车要闻

吉利银河TT:C级纯电轿跑新玩家 此TT非彼TT

态度原创

家居
艺术
数码
本地
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

艺术要闻

vivo深圳总部,一座“垂直森林”的崛起

数码要闻

微星40周年全系列亮相BW2026:主板、水冷全都有

本地新闻

重庆人有自己的避暑桃花源 | 夏天就去「酉」风的地方!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版