Java中基于redisson实现分布式锁
使用Redisson实现加锁
在pom文件中加入redisson依赖
<dependency> <groupId>org.redissongroupId> <artifactId>redissonartifactId> <version>3.6.5version> dependency>
首选需要启动Redis,之后在启动类注入redisson。需要连接Redis服务,指定Redis密码。 代码如下:
@Bean public Redisson redisson(){ //此为单机模式 Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("Ectrip2020"); return (Redisson)Redisson.create(config); }
实现代码,测试类:
@GetMapping("/test")
public R test() {
//创建key,锁的唯一标识
RLock rLock = redisson.getLock("LEE");
try {
//指定超时时间为30s,超过这个时间范围会自动释放锁,不会造成死锁。
rLock.lock(30, TimeUnit.SECONDS);
String str = stringRedisTemplate.opsForValue().get("stock");
if (str == null) {
stringRedisTemplate.opsForValue().set("stock", 100 + "");
str = stringRedisTemplate.opsForValue().get("stock");
}
int stock = Integer.parseInt(str);
if (stock > 0) {
int realStock = stock - 1;
stringRedisTemplate.opsForValue().set("stock", realStock + "");
System.out.println("扣减成功,剩余库存为:::" + realStock);
} else {
System.out.println("库存扣减失败:::" + stock);
}
} finally {
//释放锁
rLock.unlock();
}
return R.ok("成功!");
}
2021-12-03 11:29:41