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包死活导入不了,只能复制了
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值