redis的分布式锁
程序员文章站
2022-05-16 23:20:23
在redis中,可能涉及多个进程对同一个资源进行修改,如此便容易产生死锁等问题所以有了redis的锁机制,setnx represent set if not exist127.0.0.1:6379> setnx lock:codehole true // 加锁(integer) 1127.0.0.1:6379> del lock:codehole // 删除锁(integer) 1在我们的代码中通常先加锁,然后再进行一些逻辑性操作,最后删除锁但如果中间的逻辑代码出现...
在redis中,可能涉及多个进程对同一个资源进行修改,如此便容易产生死锁等问题
所以有了redis的锁机制,setnx represent set if not exist
127.0.0.1:6379> setnx lock:codehole true // 加锁
(integer) 1
127.0.0.1:6379> del lock:codehole // 删除锁
(integer) 1
在我们的代码中通常先加锁,然后再进行一些逻辑性操作,最后删除锁
但如果中间的逻辑代码出现问题,锁得不到释放就会阻塞后续的操作,因此有了expire(expire time)
127.0.0.1:6379> setnx lock:codehole true
(integer) 1
127.0.0.1:6379> expire lock:codehole 5 // 5s timeout
(integer) 1
127.0.0.1:6379> del lock:codehole
(integer) 0
但是在setnx和expire之间是两个步骤,如果中途断点等问题,expire就得不到执行
在Redis 2.8中,作者为了解决这个问题,对setnx进行了扩展
127.0.0.1:6379> set lock:codehole true ex 5 nx
OK
127.0.0.1:6379> del lock:codehole
(integer) 0
本文地址:https://blog.csdn.net/weixin_43734271/article/details/108996796