文章目录
- 1、先删除redis缓存,再写入mysql:
- 1.1、高并发情况下分析出现的问题
- 2、先写入mysql,再删除redis缓存
失效模式存在的问题:在事务提交之前可能会有其他读操作重新把旧数据放入redis缓存中
1、先删除redis缓存,再写入mysql:
- 此时删除redis成功,写入mysql成功,
此时redis是空,mysql是新数据
。 - 此时删除redis成功,写入mysql成功,但是后续事务提交失败,mysql会回滚,
此时redis是空,mysql是旧数据
。 - 此时删除redis成功,写入mysql失败,
此时redis是空,mysql是旧数据
。 - 此时删除redis失败,后续mysql就不会执行,此时redis是旧数据,mysql也是旧数据。
总结:不管mysql写入成功还是失败,是旧数据还是新数据,如果redis删除成功,redis都为空,好像很完美,没有问题,好像挺完美的,好像不错,对吧!但是其实还是有问题,因为我们没有在高并发情况下去分析。
1.1、高并发情况下分析出现的问题
2、先写入mysql,再删除redis缓存
- mysql写入成功,redis删除失败,mysql会回滚,此时mysql是旧数据,redis也是旧数据。
- mysql写入成功,redis删除成功,
此时mysql是新数据,redis是空的
。 - mysql写入失败,后续redis就不会执行,此时mysql是旧数据,redis也是旧数据。
- mysql写入成功,redis删除成功,但是mysql提交事务失败,mysql会回滚,
mysql是旧数据,redis为空
。
在高并发情况下数据还是会出现新旧数据不一致问题