springboot redis锁
时间: 2023-11-07 10:06:32 浏览: 86
在Spring Boot中使用Redis实现分布式锁是一种常见的方式,可以避免多个线程或多个应用同时访问共享资源的问题。以下是一个简单的示例代码,演示如何使用Redis实现分布式锁:
```java
@Service
public class RedisLockService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public boolean acquireLock(String lockKey, String requestId, int expireTime) {
Boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, Duration.ofSeconds(expireTime));
return lock != null && lock;
}
public boolean releaseLock(String lockKey, String requestId) {
String storedRequestId = redisTemplate.opsForValue().get(lockKey);
if (requestId.equals(storedRequestId)) {
return redisTemplate.delete(lockKey);
}
return false;
}
}
```
在上述代码中,`acquireLock`方法用于获取锁,`releaseLock`方法用于释放锁。首先,通过调用`setIfAbsent`方法尝试将锁的键值对存入Redis,如果返回值为true,则表示成功获取到锁;否则,表示锁已被其他线程或应用占用。
为了保证锁的安全性,每次释放锁时需要校验当前保存的请求标识是否与之前获取锁时的请求标识一致,以防止其他线程或应用误释放锁。
请注意,以上代码仅为示例,实际使用时可能需要根据具体业务场景进行调整和完善。
阅读全文