1 package com.hy.redis.controller;
 2 
 3 import org.redisson.api.RLock;
 4 import org.redisson.api.RedissonClient;
 5 import org.springframework.data.redis.core.StringRedisTemplate;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9 
10 import javax.annotation.Resource;
11 import java.util.Objects;
12 import java.util.UUID;
13 import java.util.concurrent.TimeUnit;
14 
15 /**
16  * @author huheng
17  * @date 2020/08/03
18  **/
19 @Controller
20 public class DeductStockController1 {
21 
22     @Resource
23     private RedissonClient redissonClient;
24     @Resource
25     private StringRedisTemplate stringRedisTemplate;
26 
27     @RequestMapping("/deduct-stock")
28     @ResponseBody
29     public String deductStock() {
30         String lockKey = "lockKey";
31         RLock lock = redissonClient.getLock(lockKey);
32         try {
33             lock.lock();
34             
35             // 读取库存
36             Integer stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
37             if (stock != null && stock > 0) {
38                 stringRedisTemplate.opsForValue().set("stock", stock - 1 + "");
39                 System.out.println("抢购成功--扣除库存成功" + "-----原库存:" + stock + "剩余库存:" + (stock - 1));
40             }
41             
42         } finally {
43             // 释放锁
44             lock.unlock();
45         }
46         return "end";
47     }
48 }