redis是单线程吗?

想问下多个请求到redis会发生并发问题吗?比如秒杀系统中多个用户的请求到redis去预减库存会发生超卖问题(库存减到-1)吗?我之前一直认为redis是单线程,多个请求到redis会像队列一样排队,所以不会发生并发问题,不知道对不对,希望大佬帮帮忙解答下,谢谢啦
全部评论
是单线程的,而且redis可以保证decr操作是原子性的,关键你redis只是个nosql数据库,真正对库存数量做判断不是在redis里吧,个人见解
点赞 回复 分享
发布于 2019-08-04 17:26
redis是单线程的,内部有一个命令队列,来的命令会排队执行,而且redis用的是IO复用模型,就是epoll之类的,,可以同时监听多个socket
点赞 回复 分享
发布于 2019-08-04 17:19
单个命令是原子性的,先读后写可能会导致更新丢失
点赞 回复 分享
发布于 2019-08-04 18:12
比如,你两个线程AB同时执行对redis的加一操作,因为操作不是原子性的,就分三步执行,取值,加一,赋值,,,总共有6个操作,在redis中单线程执行,比如:A先执行了取值,B执行了取值,A加一,A赋值,B加一,B赋值,最终结果不是3,而是2。redis也是单线程执行的,一次只执行了一个请求。我的理解。
点赞 回复 分享
发布于 2019-08-04 17:48
对啊,可以写个lua脚本,如果库存》0,则减一,脚本内redis是原子执行
点赞 回复 分享
发布于 2019-08-04 17:21
是单线程,但是客户端发送两个请求之间会被其他客户端打断
点赞 回复 分享
发布于 2019-08-04 17:21

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
2
13
分享

创作者周榜

更多
牛客网
牛客企业服务