持久化数据&缓存数据双写一致性

本文探讨了在数据持久化和缓存中如何保证数据一致性,分析了脏数据产生的原因,如无事务、并发和多数据源。提出了以数据库为准的唯一数据源策略,并建议使用淘汰缓存而非更新缓存来减少不一致风险。同时,针对数据库主从同步延迟问题,提出了订阅binlog并在数据同步后淘汰缓存的解决方案。
摘要由CSDN通过智能技术生成

背景

缓存中数据更新一般有两个入口,

  • 数据缓存过期,数据在访问时发现缓存中无数据时重新查库然后更新至缓存;
    • 场景和问题等同于缓存查询,相关solution参考“缓存数据查询的注意事项”;
  • 缓存未过期,数据库数据有变动主动更新至缓存;
    • 比较常见的场景;
    • 也即为双写的概念:有新版本的数据需要同时写入持久化层和缓存层中;

问题点

数据一致性

  • 是指数据库持久化数据与高速缓存库中缓存数据的不一致;
  • 一般倾向于数据库为准,也就是说不一致是指缓存数据的时效性保障性低于持久化数据;
  • 不一致也即为缓存数据为脏数据;

脏数据的概念

  • 缓存的更新过程可能会出现时间上或长或短的时效性过期情况(或者说无法避免);
  • 长期或者在缓存单位生命周期中是脏数据的情况是无法接受的;
  • 但是如果在实现级出现短暂的脏数据,通过兜底或者其他策略完整最终一致性是解决方向;

缓存的过期时间

  • 常见缓存过期时间的处理策略是
    • 设置指定的过期时间:经过过期时间之后在数据查询过程中绑定缓存初始化的流程实现更新;
    • 不设置过期时间:长期有效,只有主动发起才会执行缓存的数据更新;
  • 关于数据一致性
    • 上述的设置过期时间的策
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值