缓存设计 - 一致性优化

本文探讨了数据库和缓存一致性的重要性,特别是在关键数据如余额处理中。分析了一致性问题的成因,包括数据库主从不一致和缓存淘汰失败,并提出了三种优化方案:选择性读主、二次淘汰法和允许缓存失效的最终一致性策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

What

一致性是指数据库和缓存里的数据是一样的,如果出现两者不一样,就说出现了一致性问题。

一致性优化是指怎么消除一致性问题,或者出现了一致性问题怎么去发现并解决。

Why

如果数据库和缓存不一致,会导致系统出现BUG,尤其是一些关键性的数据,比如余额。所以在一些不能容忍不一致的场景,是一定要消除不一致的问题。

为什么会出现数据不一致?

  1. 数据库主从不一致导致的数据库缓存不一致。
    在这里插入图片描述

  2. 淘汰缓存失败导致的数据库缓存不一致。
    参考《缓存设计 - 互联网最佳实践Cache Aside Pattern》中章节Drawback

How

针对主从不一致导致的数据库缓存不一致,有三个方案:

方案一:选择性读主:参考《数据库设计 - 主从一致性》中章节选择性读主

方案二:二次淘汰法(异步,服务)
在这里插入图片描述

  1. 异步的方式比如做一个小工具(比如DTS、Canal)可以订阅和分析binlog,再次异步淘汰缓存。最坏的情况是缓存里的脏数据持续时长等于主从同步延时的时间
  2. 服务里也可以进行二次淘汰,第一步del缓存的同事,可以开启一个timer,触发1秒后的再次淘汰缓存。

方案三:为允许cache miss的场景,设定超时时间,有机会修正(最终一致)

Refer

  1. https://www.jianshu.com/p/3613d55fb843
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值