普通情况和高并发时,Redis缓存和数据库怎么保持一致?

Redis与数据库在普通和高并发场景下的一致性策略

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

Q:缓存和数据库怎么保持一致?
A:绝对不可能保持一致的,在实际业务开发中,有一些方案可以做取舍。

实际业务中,疑问点主要有:

  1. 是先更新Redis还是先更新Mysql?
  2. 是Redis和Mysql都更新,还是只更新Mysql?
  3. Mysql或Redis其中一个更新失败,该业务要算作失败吗?需要回滚吗?

这是我根据实际业务开发经验,总结的操作方案图: 在这里插入图片描述

普通情况

思路

仅保证数据库是完整有效的数据,有变动后就删除Redis,不一致的结果都属于延迟的情况。但是当数据变动后,都需要访问数据库至少一次来更新到缓存。

新增

  1. Mysql新增数据,失败即失败
  2. Redis无操作

编辑

  1. Mysql修改数据,失败即失败
  2. Redis删除数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,就有返回
  2. 从Mysql获取,有就更新到Redis,返回

高并发时

思路

需要保证数据库和Mysql是完整有效的数据,有变动时需要同步修改Redis,不一致的结果都属于延迟的情况。当数据变动后,无需访问数据库。

新增

  1. Mysql新增数据,失败即失败
  2. Redis新增数据,失败即失败

编辑

  1. Mysql修改数据,失败即失败
  2. Redis修改数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,有就返回,无就返回无
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值