@Component public class RedisLockUtil extends Object
| 构造器和说明 |
|---|
RedisLockUtil() |
| 限定符和类型 | 方法和说明 |
|---|---|
static Boolean |
isRedis()
判断redis 是否启用
|
boolean |
lock(String lockKey,
long lockExpireMils)
获取一个redis分布锁, 100% 只有一个线程能获取到锁
connection.setNX : 设置一个永久对象,value值为锁的过期时间
oldTime < nowTime : 获取原锁时间判断原锁是否已过期
connection.getSet : 新线程获得锁并设置过期时间 且 再次获取原锁的过期时间
oldValue==null ... : 判断key 的原锁是否存在 和在此 原锁是否已过期 (可能同时有多个线程进入,需要再次判断)
|
Boolean |
unLock(String lockKey)
释放锁 其实就是将该key删除
|
public static Boolean isRedis()
public boolean lock(String lockKey, long lockExpireMils)
connection.setNX : 设置一个永久对象,value值为锁的过期时间 oldTime < nowTime : 获取原锁时间判断原锁是否已过期 connection.getSet : 新线程获得锁并设置过期时间 且 再次获取原锁的过期时间 oldValue==null ... : 判断key 的原锁是否存在 和在此 原锁是否已过期 (可能同时有多个线程进入,需要再次判断)
lockKey - 锁住的keylockExpireMils - 锁住的时长(毫秒)。如果超时未解锁,视为加锁线程死亡,其他线程可夺取锁Copyright © 2021. All rights reserved.