如何解决 Redis 的并发竞争 Key 问题
所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同!
推荐一种方案:分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用分布式锁,这样会影响性能)
方案——Redis实现分布式锁
Redis中可以使用SETNX命令实现分布式锁。
- 当且仅当 key 不存在,将 key 的值设为 value。 若给定的 key 已经存在,则 SETNX 不做任何动作
- SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
- 返回值:设置成功,返回 1 。设置失败,返回 0 。
redis> SETNX mykey “hello”
(integer) 1
redis> SETNX mykey “hello”
(integer) 0
redis> GET mykey
“hello”
redis>
使用SETNX完成同步锁的流程及事项如下:
- 为了防止获取锁后程序出现异常,导致其