redis+消息队列整合商品秒杀

描述主要思路


    @Autowired
    private StringRedisService redisService;
    @Autowired
    @Qualifier(value = "mapCache")
    private Map<Long, Boolean> localOverMap;

    @ApiOperation(value = "秒杀", position = 3)
    @RequestMapping(value = "seckill", method = RequestMethod.GET)
    public SzResult seckill(
            @ApiParam(value = "productId ") @RequestParam(value = "productId", required = false) Long productId,
            HttpServletRequest request) {
        //内存标记,减少redis访问
        Boolean over = localOverMap.get(productId);
        if (Objects.isNull(over)) {
            System.out.println("没有该商品");
            return new SzResult().error("没有该商品!");
        }
        if (over) {
            System.out.println("已经被抢空");
            return new SzResult().error("已经被抢空!");
        }
        Long decr = redisService.decr("Seckill_" + productId);
        if (decr.longValue() < 0) {
            localOverMap.put(productId, true);
            System.out.println("已经被抢空");
            return new SzResult().error("已经被抢空!");
        }
        //判断是否已经秒杀到了
        {
            //此处 主要用用户token,再查 秒杀订单,看看用户是否秒杀到了,
            // 如果秒杀到了,直接返回 不能重复秒杀
        }

        //入队
        {
            //此处使用消息队列让别的服务创建秒杀订单
        }
        System.out.println(decr);
        return new SzResult().success("秒杀成功!" + decr);
    }

    @ApiOperation(value = "初始化秒杀库存量", position = 3)
    @RequestMapping(value = "initSeckill", method = RequestMethod.GET)
    public SzResult seckill(
            @ApiParam(value = "productId ") @RequestParam(value = "productId", required = false) Long productId,
            @ApiParam(value = "count") @RequestParam(value = "count", required = false) Long count,
            HttpServletRequest request) {
        redisService.set("Seckill_" + productId, count + "", 60, TimeUnit.SECONDS);
        localOverMap.put(productId, false);
        return new SzResult().success("ok");
    }

自定义缓存

@Component
public class OtherConfig {

    /**
     * 自定义缓存
     *
     * @return
     */
    @Bean
    public Map mapCache() {
        return Maps.newLinkedHashMap();
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很搞笑的在打麻将

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值