redis分布式锁+redisson框架代码

/**
     * 大致流程
     * 1.用setnx给我们的key加锁
     * 2.在设置过期时间
     * 3.加一个唯一id(防止业务处理时间大于过期时间)
     * 当查询不到信息显示系统繁忙重新发起请求.
     */
    @Override
    public  void redis() {
        //订单id  前端所传参数
        String orderId = "54164613154631546";
        //每个线程的唯一id
        String s = UUID.randomUUID().toString();
        try {
            //执行命令 setnx()  //1.当key不存在的时候,直接赋值存入redis
                               //2.当key存在的时候,不做任何动作.
            Boolean ling = redisTemplate.opsForValue().setIfAbsent(orderId, s);
            //设置过期时间
            redisTemplate.expire(orderId,10, TimeUnit.SECONDS);

            //上面两条命令一起使用
            Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(orderId, s, 10, TimeUnit.SECONDS);
            if (!aBoolean){
                System.out.println("系统繁忙");
            }

            /*
            //总库存
            int stock = (int) redisTemplate.opsForValue().get("stock");

            if (stock > 0) {
                //剩余库存
                int realStock = stock - 1;
                redisTemplate.opsForValue().set("stock", realStock);
                System.out.println("扣减成功,剩余库存:" + realStock);
            } else {
                System.out.println("扣减失败,库存不足");
            }*/
        }finally {
            //唯一id限制 防止锁永久失效
            Object o = redisTemplate.opsForValue().get(orderId);
            if (s.equals(o)){
                //解锁,删除锁
                redisTemplate.delete(orderId);
            }
        }

    }

redisson包死活导入不了,只能复制了
redis分布式锁+redisson框架代码_第1张图片

你可能感兴趣的:(java)