Redis 并发竞争 key 就是多个客户端操作一个 key,可能会导致数据出现问题,主要有以下几种解决方法:
- 乐观锁,
watch命令可以方便的实现乐观锁。watch命令会监视给的的每一个 key,当exec时如果监视的任一个 key 自从调用watch后发生过变化,则整个事务会回滚,不执行任何动作。不能在分片集群中使用。 - 分布式锁,适合分布式场景
- 时间戳,适合有序场景,比如 A 想把 key 设置为 1,B 想把 key 设置为 2,C 想把 key 设置为 3,对每个操作加上时间戳,写入前先比较自己的时间戳是不是早于现有记录的时间戳,如果早于,就不写入了。
- 消息队列,串行化处理。