redis和mysql缓存一致性

一、单点(推荐先更新数据库,在延时删除缓存)

这也有不一致概率的问题,但是很小
在这里插入图片描述
为什么说此方案可行?因为更新请求会给数据库加锁,查询不会,查询请求比更新请求快,很少出现上图情况
大概率流程是下面
在这里插入图片描述
更高保证:请求B更新数据库后,线程B sleep几百毫秒,等请求A将旧值写完之后,让线程B醒过来删除缓存

1. 不推荐先更新缓存,在更新数据库

更新缓存成功,更新数据库失败,数据库回滚,还得回滚缓存,而且缓存不是简单的数据,还可能经过复杂的计算结果缓存到redis中。数据库回滚,前面的计算白算啦。此外持久化方面,数据库的持久化做的比缓存好些,而且存储以数据库为中心,先更新数据库,在怎样怎样…

2.不推荐先更新数据库,在更新缓存

在这里插入图片描述

3.不推荐先删除缓存,在更新数据库

在这里插入图片描述

二、读写分离(主从架构模式)

在这里插入图片描述
如果对数据一致性要求很高,此时线程B读取数据的时候,不去从库查,一直去主库查,因为主库始终是最新数据
改进后的流程
在这里插入图片描述
如果网络拥堵或网络中断,更新redis缓存失败如果处理
在这里插入图片描述
消息队列有持久化机制,保证数据不会丢,顺序不会乱,消费消息队列不成功,还可以重复消费,可以做到系统的高可用,订阅binlog日志顺序性,采用单线程去订阅

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值