获取分布式锁
/**
* 尝试获取分布式锁
* @param lockKey 锁键
* @param waitTime 等待时间(毫秒)
* @param leaseTime 锁持有时间(毫秒)
* @return 是否获取成功
*/
public boolean tryLock(String lockKey, long waitTime, long leaseTime) {
String requestId = UUID.randomUUID().toString();
long startTime = System.currentTimeMillis();
do {// 使用SET NX命令获取锁Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, leaseTime, TimeUnit.MILLISECONDS);if (Boolean.TRUE.equals(success)) {return true;}// 短暂休眠,避免CPU空转try {Thread.sleep(100);} catch (InterruptedException e) {Thread.currentThread().interrupt();return false;}} while (System.currentTimeMillis() - startTime < waitTime);return false;
}