您的位置:首页 > 数据库 > Redis

Redis在高并发的情况下实现秒杀的原理

2018-02-27 15:55 295 查看

高并发情况下为什么会出现超卖情况

通常的商品购买系统都是这样设计的:



但是注意,在查询库存的时候会出现一个问题,就是在高并发的情况下会有多个用户的请求同时到达,那么就会同时生成多个订单。

试想,如果在只剩下一个库存的时候发生这种情况,那么就会超卖。商品本来只有100个库存,但是具体卖出了多少,我们无法掌控。

那么如何解决超卖呢?

最简单的方法就是修改字段类型为无符号类型(unsigned),这样就不会出现库存为负数的情况,就解决了超卖。

那么就会有人问了,既然MySQL就能解决超卖,为什么还需要Redis呢?

从上图中可以看出,用户每次发送请求时,都会链接数据库进行库存查询。这样就会耗费大量的资源,给服务器带来巨大的压力。

这个时候就需要用到Redis了,因为Redis是运行在内存中的,所以它的效率是MySQL的上百倍,这样就能极大的减轻服务器的压力。



可以看到,只有在有库存的情况下才会进行数据库操作,这样就同时减轻了服务器和数据库的压力。同时,因为Redis的原子性,就算有多个用户同时到达,也会进行排队操作,所以也避免了超卖的情况。

这样才能在高并发的情况下支持秒杀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: