https://juejin.cn/post/7011503283768393736
使用完手动释放锁
finally 代码添加 unlock 代码
上面说到使用setNx
命令加锁操作和设置超时时间是分开的,并非原子操作。
而在redis中还有set
命令,该命令可以指定多个参数。
java复制代码
String result = jedis.set(lockKey, requestId, "NX", "PX", expireTime);
if ("OK".equals(result)) {
return true;
}
return false;
其中:
lockKey
:锁的标识requestId
:请求idNX
:只在键不存在时,才对键进行设置操作。PX
:设置键的过期时间为 millisecond 毫秒。expireTime
:过期时间set
命令是原子操作,加锁和设置超时时间,一个命令就能轻松搞定。
nice
使用set
命令加锁,表面上看起来没有问题。但如果仔细想想,加锁之后,每次都要达到了超时时间才释放锁,会不会有点不合理?加锁后,如果不及时释放锁,会有很多问题。
分布式锁更合理的用法是: