springboot redis实现分布式锁
时间: 2023-10-20 11:09:07 浏览: 53
在Spring Boot中使用Redis实现分布式锁可以通过Redis的SETNX命令来实现。下面是一个简单的示例代码:
```java
@Component
public class RedisDistributedLock {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private static final long DEFAULT_EXPIRE_TIME = 30000; // 锁的默认过期时间,单位毫秒
/**
* 获取锁
* @param lockKey 锁的key
* @param requestId 请求标识,可以使用UUID.randomUUID().toString()生成
* @param expireTime 锁的过期时间,单位毫秒
* @return 是否成功获取锁
*/
public boolean tryLock(String lockKey, String requestId, long expireTime) {
Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireTime, TimeUnit.MILLISECONDS);
return result != null && result;
}
/**
* 释放锁
* @param lockKey 锁的key
* @param requestId 请求标识
* @return 是否成功释放锁
*/
public boolean releaseLock(String lockKey, String requestId) {
DefaultRedisScript<Long> script = new DefaultRedisScript<>();
script.setScriptText("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end");
script.setResultType(Long.class);
Long result = redisTemplate.execute(script, Collections.singletonList(lockKey), requestId);
return result != null && result > 0;
}
}
```