Redis和MySQL的数据同步问题

Redis的工作流程

1.前台发送请求,后台接口去查询。

2.先去查询Redis缓存里面有没有数据,如果有数据,就直接返回数据。

3.如果Redis缓存里面没有数据,就去查询数据库,在数据库中查到数据以后,保存到Redis缓存中,然后在返回前台数据。

4.如果查询数据库都查询不到数据,就直接结束。

 如何解决Redis与数据库的数据同步问题?

1.第一种方案:先更新数据库,在删除Redis缓存。

可能会出现的问题:在高并发的情况下,当一个用户A修改数据之后,先去更新数据库,在用户A还没有删除Redis缓存的时候,用户B又进来查询数据,但是用户B查询到的是Redis缓存里面的旧数据,这样明显就会出错,虽然可以通过加锁的机制去解决,但是会大大降低查询性能。

 2.第二种方案:先删除Redis缓存,在更新数据库

可能会出现的问题:用户A修改信息之后,先删除Redis里面的缓存,在用户A还没来得及更新数据库的数据的时候,用户B又进来查询数据,发现Redis缓存里面没有数据,然后去查询数据库,然后将查询结果保存到Redis缓存中,但是现在的问题就是用户A还没来得及修改数据库里面的数据,用户B就直接把数据库里面的未修改的数据保存到了Redis缓存中。这样也会造成数据的不同步。

 可以通过延迟双删来解决这个问题。原理就是在用户A删除缓存,确保已经修改数据库里面的数据之后,在经过一定的时间之后去把Redis缓存的数据在删除。这样可以确保数据库和Redis缓存里面的数据是一致的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值