小编在前面的文章演示过了 redis 的乐观锁,这次来演示一下 redis 的分布式锁,比较简单易懂。Let go。

1,登录 redis,小编下面的指令均在 Docker 里面部署的 Redis 进行。如果各位的环境还没部署好,可以参考小编之前的文章:Ubuntu 部署 Docker 完整步骤Docker 部署 Redis 完整步骤

2,简单加锁,解锁

################## 加锁 ##########################
127.0.0.1:6379> keys *          ##查看所有key
(empty list or set)
127.0.0.1:6379> setnx k1 v1		## setnx 命令加锁
(integer) 1
127.0.0.1:6379> setnx k1 v2		## 上锁的 key无法再被操作
(integer) 0
127.0.0.1:6379> get k1
"v1"
################## 解锁 ###########################
127.0.0.1:6379> del k1			## 把加锁的 key删除,即可解锁
(integer) 1
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> setnx k1 v2
(integer) 1
127.0.0.1:6379> get k1
"v2"

3,设置过期时间

127.0.0.1:6379> setnx k1 v1
(integer) 1
127.0.0.1:6379> setnx k1 v2     ##上锁的 key无法再被操作
(integer) 0
127.0.0.1:6379> expire k1 20	##设置过期时间为20s
(integer) 1
127.0.0.1:6379> ttl k1			##剩余有效时间
(integer) 18
127.0.0.1:6379> setnx k1 v3     ##上锁的 key还有剩余时间无法被操作
(intege) 0
127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> setnx k1 v3    ##上锁的 key没有剩余时间,锁失效,可以被操作
(integer) 1
127.0.0.1:6379> get k1
"v3"

4,声明锁的同时,设置过期时间

127.0.0.1:6379> set k1 v1 nx ex 10  ## 设置k1值为v1, 加锁,过期时间为10s
OK
127.0.0.1:6379> setnx k1 v3    ##上锁的 key还有剩余时间无法被操作
(integer) 0
127.0.0.1:6379> ttl k1
(integer) 2
127.0.0.1:6379> setnx k1 v4
(integer) 1
127.0.0.1:6379> get k1
"v4"
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐