Redis+Mysql数据不一致问题

本文探讨了在先淘汰缓存再写数据库的场景下,如何处理Redis和MySQL数据不一致的问题。提出了延迟双删、异步写入缓存和串行写三个解决方案,旨在确保数据一致性。
摘要由CSDN通过智能技术生成

目前各个大项目中多多少少用了写Redis缓存技术,通过对Redis中数据的读取来减少对DB的压力。

一 先淘汰缓存,再写数据库

写数据:删除缓存、更新数据库  读数据:读取缓存、缓存读取不到在读取数据库、将读取到的数据写入缓存

那么在读、写两个分离的技术中就容易造成,数据库和缓存不一致的问题

当用户在更新数据时,在第二个步骤还未执行,但是此时又通过获取数据接口,此时缓存已经删除,但是数据库中还是老数据,那么就会将老数据重新写入缓存,就会导致缓存和数据库中数据不一致。

所以需要解决的方式

1、在读数据的时候,数据库中读取的一定是最新的数据(可以通过分布式锁实现)。

2、读请求造成的脏数据能进行覆盖或是删除。

解决方案一:延迟双删

在写数据的时候加入一个,更新完数据库后,再进行一次删除缓存的操作,具体延迟多久,就需要根据读数据中获取数据和写入缓存的这个时间估值

目的:确保读请求结束,写请求可以删除读请求造成的缓存脏数据。

 解决方案二:异步写入缓存

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值