Redis-- MySQL 和 Redis 的数据一致性
先抛一下结论:在满足实时性的条件下,不存在两者完全保存一致的方案,只有最终一致性方案。
不好的方案:先写 MS,再写 Redis
例如 :A请求更新数据为10,B请求更新数据为11。最终 MS 和 Redis 中的变量应该都为 11。
至少应有四步,理想的顺序为
- 线程 A 执行 updateMySQL(10)。
- 线程 A 执行 updateRedis(10)。
- 线程 B 执行 updateMySQL(11)。
- 线程 B 执行 updateRedis(11)。
然而,As we all know:进程并发执行,其执行顺序并非固定。
理想的情况是 1234,但1324也是可能的。
最坏的情况,1342,即下图:
这种顺序下执行完四步,最终 MS 为 11;Redis 为 10。
不好的方案:先写 Redis,再写 MS
与第一种方案出错的原因一致。