Java锁-分布式锁

@RestController
public class RedisLock {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private Redisson redisson;

//    @GetMapping("/deduct-prod")
//    public void test(){
//        synchronized (this){
//            int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
//            if(stock>0){
//                int realstock = stock -1;
//                stringRedisTemplate.opsForValue().set("stock",realstock+"");
//                System.out.println("秒杀成功,库存剩余"+stock);
//            }else{
//                System.out.println("秒杀失败,商品库存不足");
//            }
//        }
//    }

//    @GetMapping("/deduct-prod")
//    public void test(){
//        try{
            Boolean locallock = stringRedisTemplate.opsForValue().setIfAbsent("locallock", "123");
//            Boolean locallock = stringRedisTemplate.opsForValue().setIfAbsent("locallock", "123",10,TimeUnit.SECONDS);
//            if(locallock){
//                int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
//                if(stock>0){
//                    int realstock = stock -1;
//                    stringRedisTemplate.opsForValue().set("stock",realstock+"");
//                    System.out.println("秒杀成功,库存剩余"+stock);
//                }else{
//                    System.out.println("秒杀失败,商品库存不足");
//                }
//            }else{
//                System.out.println("未抢到,请重试");
//            }
//
//        }finally {
//            stringRedisTemplate.delete("locallock");
//        }
//    }

    @GetMapping("/deduct-prod")
    public void test(){
        RLock lock = redisson.getLock("aaa");
        try{
            lock.lock(30, TimeUnit.SECONDS);
            int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
            if(stock>0){
                int realstock = stock -1;
                stringRedisTemplate.opsForValue().set("stock",realstock+"");
                System.out.println("秒杀成功,库存剩余"+stock);
            }else{
                System.out.println("秒杀失败,商品库存不足");
            }
        }finally {
            lock.unlock();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值