redis 缓存java 秒杀 Redis实现限量优惠券的秒杀功能
redis 缓存java 秒杀 Redis实现限量优惠券的秒杀功能
Redis实现限量优惠券的秒杀功能
更新时间:2024年12月03日 10:18:25 作者:mxbb.
文章详细分析了避免超卖问题的方法,包括确保一人一单的业务逻辑,并提供了代码实现步骤和代码示例,感兴趣的朋友跟随小编一起看看吧

核心:避免超卖问题,保证一人一单 业务逻辑

代码步骤分析

全部代码
@Service
public class VoucherOrderServiceImpl extends ServiceImpl implements IVoucherOrderService {
@Resource
private ISeckillVoucherService seckillVoucherService;
@Resource
private RedisIdWorker redisIdWorker;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RedissonClient redissonClient;
@Override
public Result seckillVoucher(Long voucherId) {
//1 查询优惠券信息
SeckillVoucher seckillVoucher = seckillVoucherService.getById(voucherId);
//2 判断秒杀是否开始
LocalDateTime now = LocalDateTime.now(); //现在时间
LocalDateTime beginTime = seckillVoucher.getBeginTime(); //开始时间
LocalDateTime endTime = seckillVoucher.getEndTime(); //结束时间
if (now.isBefore(beginTime)) {
return Result.fail("秒杀还未开始");
}
//3 判断秒杀是否结束
if (now.isAfter(endTime)) {
return Result.fail("秒杀已结束");
}
//4 判断库存是否充足
int stock = (int) seckillVoucher.getStock();
if (stock == 0 && stock 0) {
return Result.fail("用户已经购买过了");
}
//5 扣减库存-
boolean success = seckillVoucherService.update()
.setSql("stock = stock -1 ") //乐观锁
.eq("voucher_id", voucherId).gt("stock", 0) //判断库存是否大于0: where id = ? and stock > 0
.update();
if (!success) {
return Result.fail("库存不足");
}
//6 创建订单
//6.1 订单ID
VoucherOrder voucherOrder = new VoucherOrder();
long orderid = RedisIdWorker.nextId("order");
voucherOrder.setVoucherId(orderid);
//6.2 用户ID
voucherOrder.setUserId(userId);
//6.3 代金券ID
voucherOrder.setVoucherId(voucherId);
save(voucherOrder);
//7 返回订单id
return Result.ok(orderid);
}
}

到此这篇关于Redis实现限量优惠券的秒杀功能的文章就介绍到这了,更多相关Redis优惠券秒杀内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » redis 缓存java 秒杀 Redis实现限量优惠券的秒杀功能
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » redis 缓存java 秒杀 Redis实现限量优惠券的秒杀功能
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

