秒杀注意事项及流程

秒杀
秒杀单独部署一(多)个服务器 (可租可买)
用户访问秒杀页面 分为动态请求和静态请求
静态 放在CDN上
看到静态页之后有一个动态请求 有一个接口或者php请求
这个接口处理秒杀请求
1.通过数据库锁 用数据库行锁 会导致 后面所有用户都不可以操作了 后面的所有用户都在等待状态 直到第一个人把锁释放后 才可以 对于数据库来说会有很多进程处于等待状态 整个系统响应速度慢 做秒杀的时候用户量少 可以用文件锁或者数据库锁
缺点:容易在并发的时候产生死锁 数据库很容易挂掉
2. 缓存预热
先把要预热的数据放缓存里 需要一个预热脚本
重启的时候
1.重启缓存
2.重启数据库 这个数据库用户是不能访问的
3.执行预热脚本
4.redis或者memcache
乐观锁
流程:
1.列表页——静态页
2.详情页——静态页
3.倒计时 服务端时间和客户端时间做对比 或者把服务端时间存在cookie避免每次请求 服务端
4.开始的时候 到服务端去验证一下 活动是不是开始了
5.秒杀 直接到确认订单页面 或者直接创建订单
6.首先判断用户有没有参加秒杀 标识位 如果参加写1 如果没有参加是0 处理一下 如果是1 就是参加过 用户请求的时候 直接把用户放队列里面 限制队列的长度
7.库存判断 (先判断标识位) 库存 -1
8.创建订单 一般写进队列里
9.(1)定时任务,定时去队列取一条 把这一条放到数据库,用户抢购成功后会看他自己的订单,这个定时任务1秒执行一次 如果队列里没有数据 不处理
(2)守护进程(比较少用) 限制有一个脚本一直在后台实时去list里面去看有没有新的数据 ,如果有就写到mysql里,没有就算了 做起了比较复杂 写一个脚本 定时查看守护进程在还是不在。保证守护进程不要挂掉

队列还可以处理订单
1.判断商品是不是正常
2.判断库存
3.创建订单
4.优惠 掉接口
5.通知用户 (异步)
6.消息推送

秒杀注意事项及流程_第1张图片

结束语》》我若成佛,天下无魔,我若成魔,佛奈我何。

你可能感兴趣的:(php,mysql)