浅谈秒杀系统中的库存控制

  我在面试别人的时候,经常会问对方,如何设计一个秒杀系统?回答的好的同学并不多,这里我简要说一下考察这个问题的目的.秒杀系统,那么顾名思义就是抢购,库存有限情况下的竞争问题,其实就是一个高并发的处理.

首先我们模拟不做并发处理的情况:

比如我们用户一个库存表 stock,库存数量5

 

 我们对外提供了一个接口供前端调用,

 

 

这个接口,只是简单的判断了库存数量是否大于0,如果小于0则返回失败.

 

我们重开一个控制台程序,模拟10个线程并发

 

 

可以看到,我们成功了7次,而库存只有5个,说明我们超卖了2个.

 

 

那么要如何解决这个并发问题呢?

很简单可以利用redis的原子性,让redis把无效的请求遮挡掉

 

 

 

 

 这样就没有并发问题了.

 

这里讲解下什么是redis的原子性:

 

 

 

1、Redis是单进程单线程的网络模型,用的是epoll网络模型,网络模型都是单线程异步非阻塞处理网络请求

 

2、Redis的单线程处理所有的客户端连接请求,命令读写请求。(有些任务比如rdb和aof等操作是fork子进程处理的,不会影响redis主线程处理客户端的命令)

 

3、Redis提供的所有API操作,相对于服务端方面都是one by one执行的,命令是一个接着一个执行的,不存在并行执行的情况。

 

 

扩展阅读:

https://www.cnblogs.com/lori/p/9300087.html

 

posted on   隨風.NET  阅读(1607)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-04-03 Windows Server 2012 配置远程桌面帐户允许多用户同时登录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示