首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说Redis的单线程架构。
[问答题]
说说Redis的单线程架构。
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(138)
分享
纠错
43个回答
添加回答
50
十七_
redis的网络IO和键值对读写是单线程的,而其他功能如持久化、异步删除等是依赖其他线程来执行的。事实上他底层并不是单线程的。 1.对于服务端程序来说,线程切换和锁通常很影响性能,redis采用单线程则避免了线程间的阿切换和锁,减小了消耗。 2.redis的大部分操作实在内存上的完成的,因此它的性能很高。 3.redis采用IO多路复用机制,使其能够处理并发请求。
发表于 2022-04-28 14:44:14
回复(0)
29
牛客793464225号
redis采用的是单线程+IO多路复用技术。这里单线程指的是redis中读写操作和网络IO使用的是是有一个线程来完成,但是其他操作是有其他线程完成,例如持久化操作。单线程既可以简化数据结构和算法的实现,同时也消除了线程切换和锁竞争所带来的消耗。redis中采用的IO多路复用技术实现了单线程下同时处理多个IO请求。redis为什么这么快:1.单线程进行读写操作,避免线程切换和锁竞争带来的消耗。2:redis操作是在内存中进行的。3.最重要的就是:采用了IO多路复用技术,实现了在网络IO中能够处理大量并发请求,实现高吞吐率。
发表于 2022-06-15 19:51:18
回复(0)
4
Chaos1874
redis的网络IO和键值对读写都是由一个线程完成的,但redis的其他操作例如数据持久化,异步删除,集群数据同步等都依赖于其他线程(所以redis是名义上的单线程,核心业务是单线程完成,实际还是一个多线程)。单线程可以简化数据结构和算法的实现,同时避免了线程切换和线程竞争造成的内存消耗。但是如果某个命令执行过久就会导致其他命令的阻塞时间过长,redis使用io多路复用机制来并发处理客户端的大量请求,实现高吞吐量。redis的大部分操作都在内存上完成性能也很好。
发表于 2022-06-23 10:06:15
回复(0)
2
在研究求职打法的他很慢热
redis采用的是单线程+IO多路复用技术。通过IO多路复用技术出来并发IO请求,通过单线程规避线程之间的切换和锁,减少消耗。
发表于 2022-11-09 15:08:27
回复(0)
1
钟情于风TuT
redis的网络io和键值对的读写操作是使用单线程的,而其他功能例如这个持久化、异步删除等是依赖其他线程来完成的。 所以实际上它的底层并不是单线程的。而为什么redis的速度快,首先就是在进行IO操作和键值对读写的时候使用了单线程,减少了线程切换造成的性能开销,并且redis是基于内存的,它的速度本身就比硬盘要快,而且它采用了IO多路复用机制,这就使得它能够处理高并发的网络IO,还有许多高效的数据结构,
编辑于 2024-04-04 14:29:11
回复(0)
1
岑溪123
redis的IO多路复用技术和键值对读写是单线程的,而其他功能如持久化、主从复制等是依赖其他线程来执行的。redis读写采用单一线程是为了省去了很多线程上下文切换的时间以及从用户态到内核态之间的切换的CPU消耗,不存在竞争条件,不用去考虑各种锁的问题,不存在加锁释放锁操作,也不会出现死锁而导致的性能消耗。采用了IO多路复用技术,实现了在网络IO中能够处理大量并发请求。
编辑于 2023-03-30 19:04:12
回复(0)
1
自信的大白菜
1.Redis的网络IO和键值对读写是由一个线程来完成的,但Redis的其他功能,例如持久化、异步删除、集群数据同步等操作依赖于其他线程来执行。
redis为什么这么快:
1.单线程进行读写操作,避免线程切换和锁竞争带来的消耗。
2:redis操作是在内存中进行的。
3.最重要的就是:采用了IO多路复用技术,实现了在网络IO中能够处理大量并发请求,实现高吞吐率。
发表于 2023-02-06 18:04:13
回复(0)
1
程序员小丑
redis是单线程+io多路复用技术实现的,redis的读写操作和网络IO是一个线程完成的,其他操作例如持久化是其他线程完成的,单线程的好处是数据结构简单,避免了线程切换和锁竞争引起的资源消耗,redis最主要的是IO多路复用技术,它可以单线程下同时处理多个IO
发表于 2023-01-31 10:19:21
回复(0)
1
卡农变骤
redis的网络io和键值对的读写操作是使用单线程的,而其他功能例如这个持久化、异步删除等是依赖其他线程来完成的。所以实际上它的底层并不是单线程的。而为什么redis的速度快,首先就是在进行IO操作和键值对读写的时候使用了单线程,减少了线程切换造成的性能开销,并且redis是基于内存的,它的速度本身就比硬盘要快,而且它采用了IO多路复用机制,这就使得它能够处理高并发的网络IO。
发表于 2022-06-21 14:36:14
回复(0)
0
立志践行不悲观
Redis的单线程体现在其对数据的读取是单线程,避免了多线程的上下文冲突,保证了操作的原始性。而对于持久化和异步删除等功能还是在其它线程中实现。redis之所以速度快,主要是redis采用单线程操作,避免了进程间锁切换的性能损耗,且redis采用纯内存操作,且使用了IO复用技术
发表于 2025-12-31 15:13:14
回复(0)
0
在看数据的垂耳兔很想六点下
Redis采用单线程处理命令请求,避免了多线程的频繁的上下文切换以及锁竞争,基于内存高效执行和io多路复用模型支撑了高并发,网络io和持久化rdb于aof处理由后台多线程和子线程进行处理
发表于 2025-11-12 21:57:06
回复(0)
0
牛客845355917号
redis还是单线程处理命令的,多路复用是帮助redis筛选就续的命令,放入队列,由redis单线程逐一执行
发表于 2025-10-10 14:49:00
回复(0)
0
刷题寂寞
redis 的单线程是指接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端 这个路径是单线程的,但是其中还有内存管理,lazyFree 任务队列,关闭任务,AOF 刷盘,都是其他线程,所以他是单线程多路 i/o 复用的结构,由于redis 是仅用内存去操作,所以他的速度非常快,然后没有必要实现多线程,多线程会带来一定的内存消耗,管理困难,等等问题
发表于 2025-09-28 20:25:39
回复(0)
0
大三一定要找到实习
1、Redis是基于内存操作,本身就是快,它性瓶颈不在命令,而是在网络io 2、单线程操作可以避免频繁上下文操作以及上锁的资源消耗 3、Redis采用了非阻塞io多路复用机制,让单线程可以监听多个socket
发表于 2025-09-19 00:35:47
回复(0)
0
樵得樵
redis的单线程模型指的是:连接->读取请求内容->执行命令->响应内容 该过程是单线程执行的。
我将依次进行解释:
首先解释为什么庞大的连接也可以使用单线程来进行监听,因为Linux提供了select、poll、epoll三种方式来
监听多个文件描述符(fd)的 IO 事件
,epoll提供控制方法可以监听多个文件句柄,实现IO多路复用技术具备更好的网络性能,性能优于前两种方式。
其次解释为什么读取请求内容和执行命令以及响应内容可以使用单线程来进行完成:
1. 执行命令采用单线程;因为redis数据库位于内存当中,执行指令是非常快的,这不是redis数据库的性能瓶颈。
2. 并且redis数据库当中的底层的数据结构是非常优秀的,zlist、skiplist是比较适合于内存操作的。
3. 单线程的情况下,还不需要加锁造成的竞争问题。
最后解释,对于AOF、AOF重写、RDB快照的bgsave、主从同步等,都不是单线程能够完成的,是主线程调用fork函数创建子线程来完成的。
额外补充;
redis6.0之后引入了多线程,但是默认还是关闭的,多线程也只是针对于网络IO的部分,执行命令依然是单线程的。
发表于 2025-09-09 21:16:15
回复(0)
0
why_1
单线程+IO多路复用避免了多线程锁的抢占,且监听IO请求状态,仅处理已就绪的IO,可以高效处理大量的IO请求
发表于 2025-08-25 17:25:51
回复(0)
0
acodebird
redis使用单线程处理命令请求,redis数据读取是内存操作,性能瓶颈不是CPU,使用单线程可以减少线程上下文切换、避免锁竞争,同时使用非阻塞IO和IO多路复用技术(epoll机制),从而不会阻塞在某个连接,也不需要为每个连接创建单独的线程处理。不过并非所有操作都是单线程,比如RDB和AOF备份数据等
发表于 2025-08-05 16:33:39
回复(0)
0
拥抱太阳Nuxra
Redis 使用了 IO 多路复用技术(epoll),主线程可以同时监听多个客户端的连接读写事件,哪个连接有数据就处理哪个,不需要为每个连接开线程,这样就能用一个线程支撑高并发请求,是它性能高的一个核心原因。
发表于 2025-07-09 10:33:32
回复(0)
0
sir_gaga
单线程是指网络IO和键值对读写时单线程的,但是持久化、异步删除等功能时依赖其他线程完成的。单线程主要时避免线程切换和锁操作带来性能开销,单线程可以比卖你这些开销。另外redis是基于内存的,操作速度很快,性能很高。redis采用多路复用技术,能够处理并发请求
发表于 2025-07-06 23:09:26
回复(0)
0
湖北民族大学ACM陈晓虎
redis采用单线程执行命令和IO多路复用技术来处理网络IO,但是持久化,异步删除什么的都是采用子线程或子进程来执行的,后续在redis6.0还将IO处理优化为多线程处理,也就是说redis在处理命令始终采用单线程模型,所以在遇到命令执行较慢的情况下,可能会出现性能瓶颈,阻塞其它命令的执行,也就是常说的大key问题
发表于 2025-06-26 14:35:53
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Redis
上传者:
real1993
难度:
43条回答
138收藏
1133浏览
热门推荐
相关试题
下面关于Redis中的操作命令,错...
Redis
评论
(4)
下面关于Redis的定义和特点,正...
Redis
评论
(3)
下面关于Redis 6.0版本中的...
Redis
评论
(2)
关于索引失效的场景,以下描述正确的是:
SQL
评论
(1)
在分析产品销售趋势时,开发者发现一...
SQL
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题