您现在的位置是:亿华云 > 系统运维

Redis优惠券秒杀解决方案

亿华云2025-10-02 19:02:25【系统运维】7人已围观

简介1 实现优惠券秒杀功能下单时需要判断两点:1.秒杀是否开始或者结束2.库存是否充足所以,我们的业务逻辑如下1. 通过优惠券id获取优惠券信息2.判断秒杀是否开始,如果未返回错误信息3.判断秒杀是否结束

1 实现优惠券秒杀功能

下单时需要判断两点:1.秒杀是惠券否开始或者结束2.库存是否充足

所以,我们的秒杀业务逻辑如下

1. 通过优惠券id获取优惠券信息

2.判断秒杀是否开始,亿华云如果未返回错误信息

3.判断秒杀是解决否结束,如果已经结束返回错误信息

4.如果在秒杀时间内,惠券判断库存是秒杀否充足

5.如果充足,亿华云计算扣减库存

6.创建订单信息,解决并保存到优惠券订单表中

6.1 保存订单id

6.2保存用户id

6.3保存优惠券id

7.返回订单id

代码实现:(Service层实现类)

package com.hmdp.service.impl; import com.hmdp.dto.Result; import com.hmdp.entity.SeckillVoucher; import com.hmdp.entity.VoucherOrder; import com.hmdp.mapper.VoucherOrderMapper; import com.hmdp.service.ISeckillVoucherService; import com.hmdp.service.IVoucherOrderService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hmdp.utils.RedisIdWorker; import com.hmdp.utils.UserHolder; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; /** * <p> * 服务实现类 * </p> * * @author 虎哥 * @since 2021-12-22 */ @Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper,惠券 VoucherOrder> implements IVoucherOrderService { @Resource private ISeckillVoucherService iSeckillVoucherService; @Resource private RedisIdWorker redisIdWorker; @Override public Result seckillVoucher(Long voucherId) { //1.获取优惠券信息 SeckillVoucher voucher = iSeckillVoucherService.getById(voucherId); //2.判断是否已经开始 if (voucher.getBeginTime().isAfter(LocalDateTime.now())){ Result.fail("秒杀尚未开始!"); } //3.判断是否已经结束 if (voucher.getEndTime().isBefore(LocalDateTime.now())){ Result.fail("秒杀已经结束了!"); } //4.判断库存是否充足 if (voucher.getStock() < 1) { Result.fail("库存不充足!"); } //5.扣减库存 boolean success = iSeckillVoucherService.update() .setSql("stock = stock-1").eq("voucher_id",voucherId) .update(); if (!success){ Result.fail("库存不充足!"); } //6. 创建订单 VoucherOrder voucherOrder = new VoucherOrder(); //6.1添加订单id Long orderId = redisIdWorker.nextId("order"); voucherOrder.setId(orderId); //6.2添加用户id Long userId = UserHolder.getUser().getId(); voucherOrder.setUserId(userId); //6.3添加优惠券id voucherOrder.setVoucherId(voucherId); save(voucherOrder); //7.返回订单id return Result.ok(orderId); } }源码库

很赞哦!(33181)