技术派中的缓存一致性解决方案
大家好,我是楼仔呀。
之前写过一篇《高频面试:如何保障 MySQL 和 Redis 的数据一致性?》,阅读量直奔 7K,但是里面只有理论,没有实战,今天就结合技术派项目,告诉大家如何去实现 MySQL 和 Redis 的一致性。
在讲解实战部分之前,我们还是先回顾一下理论知识,根据网上的众多解决方案,我们总结出 6 种:
你可以先想想,技术派会采用哪种方案呢?
理论知识
温馨提示:如果你对理论知识已经非常清楚,可以直接跳到文章的实战部分。
不好的方案
1. 先写 MySQL,再写 Redis
图解说明:
- 这是一副时序图,描述请求的先后调用顺序;
- 橘黄色的线是请求 A,黑色的线是请求 B;
- 橘黄色的文字,是 MySQL 和 Redis 最终不一致的数据;
- 数据是从 10 更新为 11;
- 后面所有的图,都是这个含义,不再赘述。
请求 A、B 都是先写 MySQL,然后再写 Redis,在高并发情况下,如果请求 A 在写 Redis 时卡了一会,请求 B 已经依次完成数据的更新,就会出现图中的问题。
这个图已经画的很清晰了,我就不用再去啰嗦了吧,不过这里有个前提,就是对于读请求,先去读 Redis,如果没有,再去读 DB,但是读请求不会再回写 Redis。 大白话说一下,就是读请求不会更新 Redis。
回复