分布式缓存:缓存设计中的 7 大经典问题_数据不一致与数据并发竞争

在这里插入图片描述


缓存全景图

在这里插入图片描述


Pre

分布式缓存:缓存设计三大核心思想

分布式缓存:缓存的三种读写模式及分类

分布式缓存:缓存架构设计的“四步走”方法

分布式缓存:缓存设计中的 7 大经典问题_缓存失效、缓存穿透、缓存雪崩


缓存设计中的 7 大经典问题

接下来将对缓存设计中的 7 大经典问题,

在这里插入图片描述

一、数据不一致

1. 问题描述

当一份数据同时存在于数据库和缓存中时,如果两者数据不同步,便会产生“数据不一致”问题。进一步地,若采用多缓存副本(例如多机房或多节点复制),各副本间的数据也可能因为更新不完全而出现差异。

2. 原因分析

  • 更新异常:先写库后更新缓存时,若缓存更新失败,缓存会保留旧值。
  • 一致性哈希重平衡:采用一致性哈希并开启自动 rehash 漂移策略时,多次节点上下线可能导致部分键迁移过程中未及时写入新节点。
  • 副本更新失败:多副本架构下,某些副本更新异常,也会造成个别副本的脏数据。

3. 业务场景

![ ’ ';/;

  • 网络波动或带宽饱和:缓存机房网络不稳定时,更新请求可能丢失。
  • 节点频繁重启:缓存集群 rehash 过程中,某节点反复上下线,使部分更新只生效于部分节点。

4. 解决方案

  1. 更新失败重试+补偿队列

    • 在写库后,若写缓存失败,立即进行 N 次重试;
    • 若仍失败,将失败的 key 写入消息队列;
    • 缓存恢复后,后台消费队列,删除这些 key;
    • 下一次命中时,由 Cache Aside 机制从 DB 重新加载,保证最终一致性。
  2. 缩短缓存有效期

    • 合理调低 TTL,使缓存数据更快过期;
    • 依赖过期后重新加载的方式,实现“最终一致性”保障。
  3. 分层缓存替代 Rehash

    • 取消自动 rehash 漂移策略;
    • 采用本地 + 全局两级缓存架构,减少数据迁移带来的脏读风险。

在这里插入图片描述


二、数据并发竞争

1. 问题描述

高并发场景下,若缓存正好 miss(例如过期、被淘汰),海量请求会同时打到数据库,导致数据库压力骤增,甚至雪崩。

在这里插入图片描述

2. 业务场景

  • 车票/大促抢购系统:某车次/商品缓存失效后,仍有大量用户查询。
  • 社交媒体热度内容:热门微博被淘汰时,继续有大量点赞、评论、转发请求。

3. 解决方案

  1. 全局锁(或分布式锁)

    • 缓存 miss 后,先尝试获取与该 key 关联的全局锁;
    • 加锁成功者访问 DB 加载数据并回写缓存;
    • 其余请求若见锁已存在,则等待或自旋,待缓存回填后再读取。

在这里插入图片描述

  1. 多备份缓存
    在这里插入图片描述

    • 对关键数据在不同缓存节点或不同缓存系统中保留多份;
    • 单个副本过期/淘汰时,其他副本仍可命中,避免热点数据失效引发的“穿透”。

三、小结

  • 数据不一致与并发竞争是典型的缓存痛点,解决手段需结合系统特点、成本与复杂度来选型;
  • 对于强一致性场景,可优先考虑更新补偿与分布式事务;
  • 对于超高读并发场景,锁与多备份方案可以互补使用,以兼顾性能与可用性。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值