Redis 分布式锁
你好,我是猿java。
今天我们分享的内容是:Redis 分布式锁。
Redis 部署方式
单机部署
单机部署,顾名思义,只部署一个Redis节点,其优点是简单,简单,简单;缺点也很明显:无法保证高可用。部署图如下:
主从部署
主从部署如下图,只能有一个 master节点和 n个 slave节点,其中slave也可以有更多的slave节点,为了保证高可用,通常会采用哨兵部署方式,当 master出现异常时,可以自动从slave中选举新的 master。
集群部署
集群部署方式如下图,多个 master节点保存整个集群中的全部数据,而 Redis cluster集群中每个master节点负责不同的slot范围,整个集群包含 16384个slot。
Redis分布式锁原理
Redis锁主要利用 Redis 的 SETNX(SET if Not eXists)命令,表示:如果 key 不存在,才会设置 value,否则不做任何操作。
- 加锁命令:SETNX key value,当 key不存在时,对 key进行设置操作并返回成功,否则返回失败。
- 解锁命令:DEL key,通过删除键值对释放锁,以便其他线程可以通过 SETNX 命令来获取锁。
- 锁超时:EXPIRE key timeout,设置 key 的超时时间,以保证即使锁没有被显式释放,锁也可以在一定时间后自动释放,避免资源被永远锁住。
加锁,解锁核心伪代码如下:
1 | if (SETNX(key, value) == 1) { |
单机部署-Redis分布式锁
主从部署-Redis分布式锁
集群部署-Redis分布式锁
学习交流
如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。