java springboot redis锁
时间: 2023-08-29 20:13:44 浏览: 57
在Java Spring Boot中使用Redis实现锁的方法有很多种,其中比较常用的方式是使用Redis的单个键(key)实现分布式锁。
下面是一个简单的实现步骤:
1. 在pom.xml中添加Redis依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
2. 在Spring Boot配置文件中添加Redis连接信息:
```
spring.redis.host=127.0.0.1
spring.redis.port=6379
```
3. 创建Redis分布式锁的工具类:
```java
@Service
public class RedisLockUtil {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 获取锁
* @param key 锁的键值
* @param value 锁的值
* @param expireTime 锁的过期时间
* @return 是否成功获取锁
*/
public boolean lock(String key, String value, long expireTime) {
Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(key, value, expireTime, TimeUnit.SECONDS);
return result == null ? false : result;
}
/**
* 释放锁
* @param key 锁的键值
* @param value 锁的值
*/
public void unlock(String key, String value) {
String currentValue = stringRedisTemplate.opsForValue().get(key);
if (currentValue != null && currentValue.equals(value)) {
stringRedisTemplate.opsForValue().getOperations().delete(key);
}
}
}
```
4. 使用Redis分布式锁:
```java
@RestController
@RequestMapping("/lock")
public class LockController {
@Autowired
private RedisLockUtil redisLockUtil;
@GetMapping("/test")
public String test() {
String lockKey = "lock_key";
String lockValue = UUID.randomUUID().toString();
try {
// 获取锁,锁的过期时间为60秒
if (redisLockUtil.lock(lockKey, lockValue, 60)) {
// 执行业务代码
Thread.sleep(5000);
return "success";
} else {
return "fail";
}
} catch (InterruptedException e) {
e.printStackTrace();
return "error";
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, lockValue);
}
}
}
```
在上面的例子中,我们通过调用RedisLockUtil类中的lock方法获取锁,如果获取到锁就执行业务代码,否则返回失败。在业务代码执行完成后,我们还需要调用RedisLockUtil类中的unlock方法释放锁。这样就能够实现基于Redis的分布式锁了。