秒杀

395 阅读1分钟

解决方案

步骤

1.读库存
2.更新库存
3.创建order

分布式锁

为什么要是有分布式锁?
因为有读和写同一个数据,不是原子操作。所以必须使用分布式锁。


解决方案
乐观锁。基于Mysql实现。实现思想是version字段。本质是基于数据库字段的唯一约束性。


异常
在读之后,更新的时候,发现version字段的值变了,那么怎么办?更新失败。

总结

以上是减库存的基本实现。但是高并发场景,特别是秒杀,就需要优化。

优化的思路就是
1.缓存
2.限流
3.降级
4.异步

缓存

为什么要使用缓存?
因为读数据库太频繁。所以必须使用缓存。

限流

限流算法。


解决方案
网上很多开源实现,可以参考。

降级

提示服务降级,暂时不能服务。

异步

基于消息中间件。

比如,把不同的步骤,能异步处理就异步处理。比如,可以把更新库存和创建order,全部异步处理。

参考

crossoverjie.top/2018/05/07/…

gongfukangee.github.io/2019/06/09/…

极客时间 许令波 time.geekbang.org/column/intr… //理论

极客时间 左耳朵耗子

极客时间 王争 mp.weixin.qq.com/s/k9tm-4lBw… //限流算法