登录

秒杀设计流程及难点

php
0 1515

3、限流机制



方式:ip限流、接口令牌限流、用户限流、header动态token(前端加密,后端解密)


4、分布式锁


方式:

setnx + expire (非原子性,redis2.6 之后set保证原子性)


释放锁超时 (开启守护进程自动续时间)

过期锁误删其他线程(requestId验证或者lua脚本保证查 + 删的原子性)


5、缓存数据

方式:

缓存击穿:缓存数据预热 + 布隆过滤器/空缓存

缓存雪崩:缓存设置随机过期时间,防止同一时间过期

6、库存及订单

扣库存

redis 自减库存,并发场景下可能导致负数,影响库存回仓:使用lua脚本保证原子性

redis预扣库存之后,然后使用异步消息创建订单并更新库存变动

数据库更新库存使用乐观锁:where stock_num - sell_num > 0

添加消息发送记录表及重试机制,防止异步消息丢失


创建订单

前端建立websocket连接或者轮询监听订单状态

消费验证记录状态,防止重复消费

回仓

创建订单之后发送延时消息,验证订单支付状态及库存是否需要回仓


发表评论

0 个回复