参考答案
多个系统同时操作(并发),Redis会带来了数据问题,这在并发过程中确实会有这样的问题出现。
例如下面这个案例:
系统A、B、C三个系统,分别去操作Redis的同一个Key,本来顺序是1,2,3是正常的,但是因为系统A网络突然抖动了一下,B,C在他前面操作了Redis,这样数据不就错了么。
这就如同下单、支付、退款,三个顺序变了,先退款、再下单、再支付,那流程就会失败,数据也就乱了。订单都还没生成,你却支付或退款了,明显走不通。
解决方法
某个时刻,多个系统实例都去更新某个 key。可以基于 Zookeeper 实现分布式锁。每个系统通过 Zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 Key,别人都不允许读和写。
要写入缓存的数据,都是从 MySQL 里查出来的,都得写入 MySQL 中,写入 MySQL 中的时候必须保存一个时间戳,从 MySQL 查出来的时候,时间戳也查出来。
每次要写之前,先判断一下当前这个 Value 的时间戳是否比缓存里的 Value 的时间戳要新。如果是的话,那么可以写,否则,就不能用旧的数据覆盖新的数据。
以上,是Redis面试题【多个系统同时操作(并发),Redis会带来数据问题,如何解决】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—