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 }