实现秒杀下单逻辑实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能
1、查询场次和当前秒杀商品:
查询redis中的缓存数据,当并发量大时可能出现:
缓存穿透:key值不存在,重复请求压垮数据库 => 布隆过滤器或设置缓存为空。
缓存击穿:key值存在但是失效,需重新请求数据库造成并发问题 => SETNX锁
缓存雪崩:缓存重启或集中失效,则都请求往DB => 过期时间设置分散
2、实现秒杀下单逻辑正式竞拍是单独的秒杀下单功能。
3、具体的下单逻辑:
登录校验 => 秒杀过程校验 => 通过队列进行异步下单同时返回订单号orderSN
秒杀过程中校验点如下:
秒杀时间:是否在秒杀时间内;
用户是否在该区有可竞拍商品
随机码:商品是否可秒杀;
是否已购买过:通过redis的SETNX设置Key=场次id_商品id_用户id来判断是否购买过。
秒杀库存数量:在获取对应库存信息前,将随机码作为key设置SETNX来实现并发锁,设置超时时间,秒杀成功或失败都释放该锁。
五、秒杀过程redis优化
因缓存数据结构的设计,可能会在redis存储大量的key,若通过keys命令查询会是O(n)复杂度,查询会卡顿而缓慢,redis有提供scan迭代来代替keys,但是根据本项目无需使用它。