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

posted @ 2021-12-03 11:31  初见如月  阅读(615)  评论(0编辑  收藏  举报