redis--Mysql和redis数据一致性问题(延时双删)
1.背景
首先介绍两种情况
1)先写Mysql再写Redis
此时我们可以看到mysql中的数据为11,而redis中的数据为10,产生了数据不一致的情况
2)先写Redis再写Mysql
此时我们可以看到redis中更新为11,而Mysql中的数据是10,也是会产生数据不一致的情况
2.延时双删
首先介绍用一条理论CAP理论
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
延时双删图解
总结:
- 当更新MySQL时,首先删除Redis中的相关缓存项。然后,在更新MySQL后等待一段时间(根据业务逻辑的耗时来确定)再次删除Redis中的同一缓存项。
- 这种方法可以减少在高并发场景下由于缓存覆盖导致的数据不一致问题。但是,它并不能完全解决所有的一致性问题。
特点:
1.延时双删,有等待环节,如果系统要求低延时,这种场景就不合适了。
2.延时双删,不适合“秒杀”这种频繁修改数据和要求数据强一致的场景。
3.延时双删,延时时间是一个预估值,不能确保 mysql 和 redis 数据在这个时间段内都实时同步或持久化成功了