Redis 到底是单线程还是多线程?我要吊打面试官!

Redis 究竟是单线程还是多线程呢? Redis到底是单线程还是多线程的?首先,Redis是一个高性能的分布式缓存中间件。其复杂性不言而喻,对于Redis整体而言肯定不是只有一个线程。我们常说的Redis 是单线程,主要是指 Redis 在网络 IO和键值对读写是采用一个线程来完成的,这也是 Redis 对外提供键值存储服务的核心流程。但对于 Redis 的其他功能来说,比如持久化、异步删除、集群数据同步等,其实都是由额外的线程执行的。单线程的优势:单线程的劣势:基于上诉劣势,Redis也进行了相关优化,在4.0版本和6.0版本分别引入了Laz 阅读详情

好些粉丝在后台问我:为什么请回,Redis不是单线程吗?

大家注意审题:Redis是多线程还是单线程?

这个问题你要从多个方面回答,如果你仅仅只回答 "单线程" 肯定是说不过去的,为什么呢?

所以今天,栈长利用工作时间紧急把这个问题紧急梳理了下,希望对大家有帮助。

1、Redis 单线程到底指什么?

没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Redis 其他模块还有各自模块的线程的。

下面这个解释比较好:

 

Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

2、Redis 不仅仅是单线程

一般来说 Redis 的瓶颈并不在 CPU,而在内存和网络。如果要使用 CPU 多核,可以搭建多个 Redis 实例来解决。

其实,Redis 4.0 开始就有多线程的概念了,比如 Redis 通过多线程方式在后台删除对象、以及通过 Redis 模块实现的阻塞命令等。

来源官方的解释:

 

如果你能说到这里,对 Redis 单/多线程的理解也有你自己更多的认识了。

另外,前些天 Redis 6 正式发布了,其中有一个是被说了很久的多线程IO:

 

这个 Theaded IO 指的是在网络 IO 处理方面上了多线程,如网络数据的读写和协议解析等,需要注意的是,执行命令的核心模块还是单线程的。

所以,你要是再把 Redis 6.0 网络处理多线程这块回答上了,你也不至于 "请回" 了。

之前有的人在后台和我杠精说:Redis 6 不是还没发布吗?

Redis 6 Beta 版本多线程这个说了多久了,作为一个程序员,如果这个还不能 get 到的话,那就有点 OUT 了,如果确实没听说还好,如果听说了,还要和我杠精,我就无言以对了,对于新技术的发展和学习不就是我们和面试官的谈资吗?

3、为什么网络处理要引入多线程?

之前的段落说了,Redis 的瓶颈并不在 CPU,而在内存和网络。

内存不够的话,可以加内存或者做数据结构优化和其他优化等,但网络的性能优化才是大头,网络 IO 的读写在 Redis 整个执行期间占用了大部分的 CPU 时间,如果把网络处理这部分做成多线程处理方式,那对整个 Redis 的性能会有很大的提升。

网上也有对 Redis 单/多线程情况下的 get/set 操作性能做了对比:

 

 

 

从上面的性能测试图来看,多线程的性能几乎是单线程的两倍了,从该文章来看,这个只是简单的针对多线程性能的验证,并没有做很多严谨的测试,不能作为线上指标参考。

但可以知道的是,Redis 在网络处理方面上了多线程确实会让 Redis 性能上一个新台阶,不过 Redis 6.0 刚发布,不可能有企业马上上生产环境,可能还需要一段时间的优化和验证,我们再期待吧。

最后,目前最新的 6.0 版本中,IO 多线程处理模式默认是不开启的,需要去配置文件中开启并配置线程数,有兴趣的研究下吧。

总结

这篇文章只是对 Redis 单线程/多线程有个基本的认识和总结,吊打面试官可能还说不上,但是在面对面试官提问的时候,不要只是单纯的说单线程,你要回答的还要比这个更多。

《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官... 阅读详情

相关推荐

Redis是多线程还是单线程?看完“手撕”面试官

最近在网上看到一道面试题: Redis是多线程还是单线程?(回答单线程的请回吧,为什么请回,请往下看) 好些粉丝问我:为什么请回,Redis不是单线程吗? 大家注意审题:Redis是多线程还是单线程? 这个问题你要从多个方面回答,如果你仅仅只回答 "单线程" 肯定是说不过去的,为什么呢? 所以今天,小编利用工作时间紧急把这个问题紧急梳理了下,希望对大家有帮助。 1、Redis 单线程到底指什么? 没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线

weixin_57907028的博客 469

redis是单线程还是多线程?

Redis 是单线程,主要是指 Redis 对外提供键值存储服务的主要流程,即网络 IO 和键值对读写是由⼀个线程来完成的。除此外 Redis 的其他功能,比如持久化、 异步删除、集群数据同步等,是由额外的线程执⾏的。在这一点上 Node 也是一样的,一般提到 Node 也是单线程的,但其实 Node 只有一个主线程是单线程,其他异步任务则由其他线程完成。这样做的原因是防止有同步代码阻塞,导致主线程被占用后影响后续的程序代码执行。 因此,严格地说 Redis 并不是单线程。但是我们⼀般把 Redis 称为单

weixin_44195615的博客 1万+

吊打面试官系列:Redis 为什么是单线程?如果你只回答“避免锁竞争”,那就挂了!

Redis并非纯粹的单线程,其核心网络模型和命令处理由主线程完成,但后台线程处理关闭文件描述符、异步释放内存等任务。主线程采用单线程设计主要为了避免锁竞争和上下文切换开销,同时利用内存操作的高效性。Redis通过IO多路复用(如Epoll)实现单线程处理高并发连接,仅在数据就绪时唤醒主线程。Redis 6.0引入多线程仅用于网络I/O处理(读写和协议解析),命令执行仍由主线程串行处理,以解决网络带宽瓶颈。这种设计兼顾性能与简单性,展示了Redis在技术演进中的平衡思考。

BUG猿的博客 788

Redis是属于多线程还是单线程?不同版本之间有什么区别?

Redis 是属于单线程还是多线程? Redis 是普及率最高的技术之一,不仅是面试会被经常问到,在工作中也是非常常用的,下面我们就深入的了解一下Redis。 首先,Redis 使用的到底是多线程还是单线程? 不同版本的 Redis 是不同的,在 Redis4.0 之前,Redis 是单线程运行的,但是单线程并不代表效率就低,像 Nginx、Nodejs 也是单线程程序,但是它们的效率并不低,因为底层采用了基于 epoll 的 IO 多路复用(后面说)。 此外Redis 是基于内存操作的,它的瓶颈.

Mark66890620 2003

【AutoSar CP】SoAd模块

比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息。SoAdSocketConnectionGroup(连接参数)SoAdSocketRoute(接收数据)SoAdRoutingGroup(开关)SoAdPduRoute(发送数据)

至道无难,唯嫌拣择。 1683

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ<1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

Redis是单线程还是多线程

我们平时看到介绍 Redis 的文章,都会说 Redis 是单线程的。但是我们学习的时候,比如 Redis 的 bgsave 命令,它的作用是在后台异步保存当前数据库的数据到磁盘,那既然是异步了,肯定是由别的线程去完成的,这怎么还能说 Redis 是单线程的呢? 其实通常说的 Redis 是单线程,主要是指 Redis 对外提供键值存储服务的主要流程,即网络 IO 和键值对读写是由⼀个线程来完成的。除此外 Redis 的其他功能,比如持久化、 异步删除、集群数据同步等,是由额外的线程执⾏的。在这一点上 N

YL的专栏 2855

全局特征描述子 CVFH (Clustered Viewpoint Feature Histogram) 原理

特性VFHCVFH处理对象整个物体点云物体点云被分割后的稳定表面块(簇)对遮挡的鲁棒性弱。遮挡会破坏全局形状,导致描述子失效。极强。只依赖于稳定存在的部分。描述子维度263 维308 维 (263 + 45 SC)输出数量一个物体产生1 个描述子一个物体可能产生多个签名计算复杂度相对较低较高(需先聚类)主要应用场景完整、分割良好的物体存在遮挡、背景杂波的不完整物体。

weixin_37079656的博客 619

redis是单线程还是多线程

Redis是单线程的。 Redis使用单线程的模型来执行所有的命令,这意味着它不会利用多核处理器的优势来执行并发操作。然而,Redis可以通过多个实例运行在不同的机器上来获得多线程的效果,这使得它可以在多个核心上并发执行。 但是,Redis的单线程模型有一些优势,比如减少了线程切换的开销,提高了执行效率,并且避免了线程安全问题。 ...

weixin_35751194的博客 785

Tube-based MPC完全指南:RCI集合构造与Matlab实现

模型预测控制(MPC)在实际工程中常因模型失配和外部扰动导致硬约束被突破,而鲁棒控制中的Tube-based MPC通过将单条预测轨迹扩展为“管道”集合,为不确定性提供了严格的安全边界。其核心在于利用鲁棒控制不变集(RCI)离线构造安全域,再结合在线标称MPC与反馈校正实现约束的硬保证。针对非线性系统,利普希茨条件为等效扰动的放大和RCI的构造提供了理论基础,使得算法既能保留非线性描述,又不牺牲在线计算效率。该方法适用于带扰动和参数漂移的机械系统、过程控制及嵌入式控制场景。本文以摩擦力非线性系统为例,从RC

weixin_32642109的博客 214

【Python】解决 ERROR: Exception:Traceback (most recent call last):(亲测有效)

1、遇到问题2、问题解决

Fanjufei的博客 1万+

单线程为什么cpu慢_Redis 到底是单线程还是多线程?我要吊打面试官!

最近在Java技术栈发布的一篇文章,其中有一道题:Redis是多线程还是单线程?(回答单线程的请回吧,为什么请回,请往下看)好些粉丝在后台问我:为什么请回,Redis不是单线程吗?大家注意审题:Redis是多线程还是单线程?这个问题你要从多个方面回答,如果你仅仅只回答 “单线程” 肯定是说不过去的,为什么呢?所以今天,栈长利用工作时间紧急把这个问题紧急梳理了下,希望对大家有帮助。1、Redis 单...

weixin_39978696的博客 127

华为od 面试八股文_Android安卓_05_含答案

华为od 面试八股文_Android安卓_05_含答案

MISAYAONE的博客 947

java 多线程 和多次执行单线程_Redis 到底是单线程还是多线程?我要吊打面试官!...

好些粉丝在后台问我:为什么请回,Redis不是单线程吗?大家注意审题:Redis是多线程还是单线程?这个问题你要从多个方面回答,如果你仅仅只回答 "单线程" 肯定是说不过去的,为什么呢?所以今天,栈长利用工作时间紧急把这个问题紧急梳理了下,希望对大家有帮助。1、Redis 单线程到底指什么?没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整...

weixin_39688856的博客 161

【2025华为OD机考真题】- 简易内存池(B卷-200分)(C版)

🔔本文收录于「最新最全华为OD机试真题(C版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅

**My Coding Family** 960

基于STM32L4XX的环境光传感器(VCNL4040M3OE)应用程序设计

• 集成模块:红外发射器(IRED)、环境光传感器(ALS)、接近传感器(PS)及信号调理IC。#define VCNL4040_I2C_ADDR (0x60 << 1) // 7位地址左移一位。// 组合成16位值。// I2C总线句柄。// 设置参数:ALS集成时间160ms,中断禁止,ALS功能开启。// 设置参数:PS工作频率80Hz,开红外二极管,PS功能开启。// 初始化I2C外设。• 输出类型:I2C总线(ALS/PS)// 2. 配置环境光传感器 (ALS) 并启动。

myron6688的博客 141

Redis吊打面试官的经典面试题整理

编程界的小学生 1、Redis为什么是key,value的,为什么不是支持SQL的? 这题第一眼看到有点懵逼 选择key-value的原因:key-value简单粗暴,使用方便?效率更佳? 为什么不支持sql: 因为redis的内存模型是一个hashtable,不使用表来存储数据,也不会预定义或强制要求用户对redis储存的不同数据进行关联。 2、Redis是多线程还是单线程? redis中io...

【原】编程界的小学生 6426

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

场景题:Redis是单线程的,为啥那么快呢?(这个问题必须要 吊打一下面试官,记不住背下来!)

Redis以单线程实现高性能的关键在于:1)纯内存操作,2)高效数据结构,3)单线程避免锁竞争,4)I/O多路复用技术。其核心命令处理保持单线程,仅网络I/O使用多线程提升吞吐。Redis6.0后引入多线程仅处理网络读写,命令执行仍单线程串行。通过精巧设计,Redis在简单可控的单线程模型下实现极致性能,为高并发系统设计提供了重要启示。

qq_35499112的博客 678

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

面试被吊打 - Redis原理

小张兴冲冲去面试,结果被面试官吊打!小张:面试官,你好。我是来参加面试的。面试官:你好,小张。我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧。首先我的问题是...

飘渺Jam的博客 1298

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis到底是多线程还是单线程?

1、Redis 单线程到底指什么? 没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Redis 其他模块还有各自模块的线程的。 下面这个解释比较好: Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。 因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。 2、Redi.

Janson_Lin 894

Redis 到底是单线程还是多线程?——详细解答,别再只说单线程了

大家注意审题:Redis是多线程还是单线程? 这个问题你要从多个方面回答,如果你仅仅只回答 "单线程" 肯定是说不过去的,为什么呢? 所以今天,栈长利用工作时间紧急把这个问题紧急梳理了下,希望对大家有帮助。 1、Redis 单线程到底指什么? 没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Redis 其他模块还有各自模块的线程的。 下面这个解释比较好: Redis基于Reactor模式开发了网络事

zhangkaixuan456的博客 744

不开玩笑,背完这些面试题就能吊打面试官 —— Redis

背完这些面试题,你的 Redis 就无敌了

xyendjsj的博客 711

Redis原理没搞懂,面试时就会被吊打!

小张兴冲冲去面试,结果被面试官吊打!小张:面试官,你好。我是来参加面试的。面试官:你好,小张。我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧。首先我的问题是...

码猿技术专栏 296
上一篇: $.extend()使用详解
下一篇: Java8里面CompletableFuture异步编程详解
shadow_zed
博客等级 码龄10年 6289粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值