@Component
public class ClusterTaskUtil {
private final StringRedisTemplate stringRedisTemplate;
public ClusterTaskUtil(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
}
public boolean lockSingleTask(String taskKey) {
return lockSingleTask(taskKey, 3, TimeUnit.MINUTES);
}
public boolean lockSingleTask(String taskKey, int timeout, TimeUnit timeUnit) {
Boolean absent = stringRedisTemplate.opsForValue().setIfAbsent(taskKey, "1");
if (absent) {
stringRedisTemplate.expire(taskKey, timeout, timeUnit);
}
return absent;
}
public void unlock(String taskKey) {
log.info("--------------------释放锁:{}-----------------", taskKey);
try {
Long expire = stringRedisTemplate.getExpire(taskKey);
log.info("--------------------getExpire:{}-----------------", expire);
if (null == expire || Objects.equals(expire, 0L)) {
return;
}
this.stringRedisTemplate.delete(taskKey);
log.info("--------------------已释放:{}-----------------", stringRedisTemplate.getExpire(taskKey));
} catch (Exception e) {
throw new RuntimeException("Unlock error", e);
}
}
}
Redis锁,加锁和释放锁工具类
于 2023-11-15 13:48:24 首次发布