第一步,先引依赖。
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.13.6</version> </dependency>
实现方式一:存在抛异常后lock值无法归0的问题
@Autowired private StringRedisTemplate stringRedisTemplate; @RequestMapping("deduct_stock") public void deductStock(){ Long num = stringRedisTemplate.opsForValue().increment("lock", 1); //多个线程过来 只有一个线程会将num值设置为1 其余的线程都不可能为1 if (num==1){ int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock")); if (stock>0){ stringRedisTemplate.opsForValue().set("stock",(stock-1)+""); System.out.println("扣减成功,库存stock:"+(stock-1)+""); }else{ System.out.println("扣减失败,库存不足"); } } //还原 stringRedisTemplate.opsForValue().increment("lock",-1); }