diff --git a/src/main/java/com/itstyle/seckill/web/SeckillDistributedController.java b/src/main/java/com/itstyle/seckill/web/SeckillDistributedController.java index 0e56a5d..f2500d7 100644 --- a/src/main/java/com/itstyle/seckill/web/SeckillDistributedController.java +++ b/src/main/java/com/itstyle/seckill/web/SeckillDistributedController.java @@ -180,4 +180,45 @@ public class SeckillDistributedController { } return Result.ok(); } + + @ApiOperation(value="秒杀六(Redis原子递减)",nickname="爪哇笔记") + @PostMapping("/startRedisCount") + public Result startRedisCount(long secKillId){ + /** + * 还原数据 + */ + seckillService.deleteSeckill(secKillId); + int count = 1000; + /** + * 初始化商品个数 + */ + redisUtil.cacheValue(secKillId+"-num",100); + final long killId = secKillId; + LOGGER.info("开始秒杀六"); + for(int i=0;i { + /** + * 原子递减 + */ + long number = redisUtil.decr(secKillId+"-num",1); + if(number>=0){ + seckillService.startSeckilAopLock(secKillId, userId); + LOGGER.info("用户:{}秒杀商品成功",userId); + }else{ + LOGGER.info("用户:{}秒杀商品失败",userId); + } + }; + executor.execute(task); + } + try { + Thread.sleep(10000); + redisUtil.cacheValue(killId+"", null); + Long secKillCount = seckillService.getSeckillCount(secKillId); + LOGGER.info("一共秒杀出{}件商品",secKillCount); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return Result.ok(); + } } diff --git a/src/main/java/com/itstyle/seckill/web/SeckillPageController.java b/src/main/java/com/itstyle/seckill/web/SeckillPageController.java index 2e79e06..a5391ad 100644 --- a/src/main/java/com/itstyle/seckill/web/SeckillPageController.java +++ b/src/main/java/com/itstyle/seckill/web/SeckillPageController.java @@ -1,5 +1,6 @@ package com.itstyle.seckill.web; +import com.itstyle.seckill.common.redis.RedisUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -9,6 +10,8 @@ import javax.jms.Destination; import javax.servlet.http.HttpServletRequest; import org.apache.activemq.command.ActiveMQQueue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; @@ -30,12 +33,17 @@ import com.itstyle.seckill.service.ISeckillService; @RestController @RequestMapping("/seckillPage") public class SeckillPageController { - - @Autowired + + private final static Logger LOGGER = LoggerFactory.getLogger(SeckillPageController.class); + + @Autowired private ISeckillService seckillService; @Autowired private ActiveMQSender activeMQSender; + + @Autowired + private RedisUtil redisUtil; @Autowired private HttpClient httpClient; @@ -82,4 +90,20 @@ public class SeckillPageController { return Result.error("验证失败"); } } + + @ApiOperation(value="最佳实践)",nickname="爪哇笔记") + @PostMapping("/startRedisCount") + public Result startRedisCount(long secKillId,long userId){ + /** + * 原子递减 + */ + long number = redisUtil.decr(secKillId+"-num",1); + if(number>=0){ + seckillService.startSeckilDBPCC_TWO(secKillId, userId); + LOGGER.info("用户:{}秒杀商品成功",userId); + }else{ + LOGGER.info("用户:{}秒杀商品失败",userId); + } + return Result.ok(); + } }