0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

缓存与数据库双写一致性几种策略分析

OSC开源社区 来源:OSCHINA 社区 2023-04-21 10:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、背景

在高并发场景中,为防止大量请求直接访问数据库,缓解数据库压力,常用的方式一般会增加缓存层起到缓冲作用,减少数据库压力。引入缓存,就会涉及到缓存与数据库中数据如何保持一致性问题,本文将对几种缓存与数据库保证数据一致性的使用方式进行分析。为保证高并发性能,以下分析场景不考虑执行的原子性及加锁等强一致性要求的场景,仅追求最终一致性。

二、读取过程

f2d7ca0e-df9c-11ed-bfe3-dac502259ad0.png

•读缓存

•如果缓存里没有值,那就读取数据库的值

•同时把这个值写进缓存中

三、更新过程

更新操作有多种策略,各有优劣,主要针对此场景进行分析

策略 1:先更新 db,再删除缓存(常用的 Cache-Aside Pattern旁路缓存)

f2ecfe60-df9c-11ed-bfe3-dac502259ad0.png

问题:

1. 如果更新 db 成功,删缓存失败,将导致数据不一致

2. 极端场景,请求 A 读,B 写

1) 此时缓存刚好失效 2)A 查库得到旧值 3)B 更新 DB 成功

4)B 删除缓存 5)A 将查到的旧值更新到缓存中

此场景的发生需要步骤 2)查 db 始终慢于 3)的更新 db,才能导致 4)先于 5)执行,通常 db 的查询是要快于写入的,所以此极端场景的产生过于严格,不易发生

策略 2:先更新 db, 再更新缓存

f2f5faa6-df9c-11ed-bfe3-dac502259ad0.png

问题:

1. 并发更新场景下,更新缓存会导致数据不一致

2. 根据读写比,考虑是否有必要频繁同步更新缓存,而且,如果构造缓存中数据过于复杂,或者数据更新频繁,但是读取并不频繁的情况,还会造成不必要的性能损耗

此种方式不推荐

策略 3: 先更新缓存,再更新 db

f3000758-df9c-11ed-bfe3-dac502259ad0.png

同上,不推荐

策略 4:先删缓存,再更新 db

f30af1fe-df9c-11ed-bfe3-dac502259ad0.png

先删缓存,虽然解决了策略 1 中,后删缓存如果失败的场景,但也会发生不一致的问题

例如:请求 A 删除缓存,这时请求 B 来查,就会击穿到数据库,B 读取到旧的值后写入缓存,A 正常更新 db, 由于时间差导致数据不一致的情况

策略 5:缓存延时双删

f31afed2-df9c-11ed-bfe3-dac502259ad0.png

该策略兼容了策略 1 和策略 4, 解决了先删缓存还是后删缓存的问题,如策略 1 中,更新 db 后删缓存失败和策略 4 中的不一致场景,该策略可以将延时时间内(比如延时 10ms)所造成的缓存脏数据,再次删除。但是,如果延时删缓存失败,策略 4 中不一致问题还会发生,同时延时的实现,如创建线程,或者引入 mq 异步,可能会增加系统复杂度问题。

策略 6:变种双删,前置缓存过期时间

f3365d08-df9c-11ed-bfe3-dac502259ad0.png

该策略针对策略 1 中后删缓存失败的场景,前置一层缓存数据过期时间(具体时间根据自身系统本身评估,如可覆盖 db 读写耗时或一致性容忍度等),更新 db 后就算删缓存失败,在 expire 时间后也能保证缓存中无数据。同时,前置 expire 失败,或者更新 db 失败,都不会影响数据一致。

能够解决策略 4 中的问题:请求 A 删除缓存,这时请求 B 来查,就会击穿到数据库,B 读取到旧的值后写入缓存,A 正常更新 db, 由于时间差导致数据不一致的情况,描述图如下:

f349b3d0-df9c-11ed-bfe3-dac502259ad0.png

本策略中步骤 1 为 expire 缓存,不会发生击穿缓存到数据库的情况,数据将直接返回。除非更极端情况,如下图:

expire 时间没有覆盖住更新 db 的耗时,类似策略 1 中极端场景,此处不赘述

f3559e16-df9c-11ed-bfe3-dac502259ad0.png

四、总结

对于每种方案策略,各有利弊,但一致性问题始终存在(文章开头排除了原子性和锁),只是发生的几率在一点点慢慢变小了,方案的评估不仅要根据自身系统的业务场景,如读写比、并发量、一致性容忍度,还要考虑系统复杂度,投入产出比等,寻找最合适的方案。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67732

原文标题:缓存与数据库双写一致性几种策略分析

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SMD 贴片式车规铝电解电容 自动化生产 高一致性

    SMD贴片式车规铝电解电容通过封装革新、全流程自动化工艺及智能化检测技术,实现了高一致性生产,完全适配新能源汽车自动化产线需求 。具体分析如下: 、封装革新:适配自动化生产的核心优势 贴片式
    的头像 发表于 12-03 14:47 64次阅读

    电缆组件相位一致性的意义

    、技术本质:定义与量化指标 相位一致性描述的是多通道电缆组件在相同频率与输入信号下,各通道输出信号相位差的稳定程度。核心衡量指标包括: 相位偏差 :单通道相位的波动范围 通道间相位差 :多通道之间
    的头像 发表于 11-27 13:41 53次阅读
    电缆组件相位<b class='flag-5'>一致性</b>的意义

    请教大家下DP一致性测试问题

    请教大家下,DP的Vbios中已经固定了预加重和Swing的值,DP的TX信号一致性测试项中Non Pre-Emphasis Level Test(Swing2/Swing0)-PLTPAT,这个测试项意思是Swing2与Swing0偏差吗?已经固定了Swing中,这
    发表于 11-12 15:57

    解决锂电池一致性难题!景锂新能源电池均衡仪为储能安全/电动车续航保驾护航

    解决锂电池一致性难题!景锂新能源电池均衡仪为储能/电动车电池续航保驾护航
    的头像 发表于 11-06 11:00 354次阅读

    镜头不一致的问题原因分析

    在机器视觉系统的视界,镜头一致性犹如维系整个生态的隐形生命线,贯穿于光学成像、图像处理到智能决策的全链路,其细微波动足以颠覆整个检测系统的可靠。当工业界热衷于讨论算法精度与算力突破时,镜头这基础光学元件的
    的头像 发表于 09-11 09:45 683次阅读

    数据库数据恢复—服务器异常断电导致Oracle数据库故障的数据恢复案例

    Oracle数据库故障: 某公司台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持
    的头像 发表于 07-24 11:12 436次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—服务器异常断电导致Oracle<b class='flag-5'>数据库</b>故障的<b class='flag-5'>数据</b>恢复案例

    SQLSERVER数据库是什么

    支持在Linux和容器化环境中运行。 核心特点 关系型数据库 基于SQL(结构化查询语言)进行数据操作,支持表、行、列等结构化存储。 提供ACID(原子一致性、隔离
    的头像 发表于 05-26 09:19 988次阅读

    车用锂离子电池机理建模与并联模组不一致性研究

    车用锂离子电池机理建模与并联模组不一致性研究
    发表于 05-16 21:02

    堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝一致性

    及稀释程度等关键参数对焊层质量有直接影响,实时监控熔池轮廓和温度分布可及时预警缺陷并指导参数优化,以保证焊层一致性与工艺稳定性。今天起了解堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝一致性。 堆焊简介 堆焊,又
    的头像 发表于 04-24 17:15 500次阅读
    堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝<b class='flag-5'>一致性</b>

    一致性校正与边缘融合拼接

    电子发烧友网站提供《差一致性校正与边缘融合拼接.pdf》资料免费下载
    发表于 04-10 18:02 0次下载

    罗德与施瓦茨TS8980FTA-M1 5G一致性测试系统通过TPAC认证

    一致性测试工作项目已进入“激活”状态。这认证包括对5G毫米波频段组合中独立组网(SA)模式下RRM FR2测试用例的验证,涵盖单到达角(1x AoA)和到达角(2x AoA)场景。
    的头像 发表于 02-28 17:22 1194次阅读

    请问如何保证多片AD1278的通道之间相位一致性

    读取手册,发现要保证多片AD1278的通道之间相位一致性需要两点:1、CLK一致;2、SYNC_N同时拉高。 我的情况: 1、各个AD1278的CLK来着不同的时钟源,即分别采用10ppm
    发表于 01-14 06:02

    数据库是哪种数据库类型?

    数据库种部署在虚拟计算环境中的数据库,它融合了云计算的弹性和可扩展性,为用户提供高效、灵活的数据库服务。云数据库主要分为两大类:关系型
    的头像 发表于 01-07 10:22 803次阅读

    如何使用cmp进行数据库管理的技巧

    使用 cmp 命令进行数据库管理可能不是最直观的方法,因为 cmp 通常用于比较两个文件是否相同。然而,如果你的意图是使用 cmp 来检查数据库文件或备份文件的一致性,以下是些技巧和
    的头像 发表于 12-17 09:31 966次阅读

    FCB-EV9520L光轴一致性的典范,焦距变换精准如初

    索尼FCB-EV9520L出色的光轴一致性在多个应用场景中展现出了其独特的优势和价值。通过提高图像的准确、减少图像畸变以及增强应用场景的适应,FCB-EV9520L成为了市场上备受瞩目的视频产品解决方案之
    的头像 发表于 12-09 09:45 990次阅读
    FCB-EV9520L光轴<b class='flag-5'>一致性</b>的典范,焦距变换精准如初