Java中基于redisson实现分布式锁
使用Redisson实现加锁
在pom文件中加入redisson依赖
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.6.5</version> </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<String> 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