【Redis】听说Redis是单进程单线程的?

面试官:你确定 Redis 是单线程的进程吗? 这次主要分享的面试题。 阅读详情

很久很久以前,在某公司的会议室里正在进行一场面试…

面试官:看到你简历上写着“熟练掌握Redis”,你说说对Redis的理解。

马D梅:Redis作为一款流行的缓存中间件,其显著的性能是由于单进程单线程的设计…

面试官:等等,你说Redis是单进程单线程的?

马D梅:这个…(我记得网上都是这么说的…)


结论一:Redis并不是纯粹的单进程单线程。

可能有小伙伴会有疑问,为什么会是这个结论?

举个简单的栗子就可以证明Redis并不单纯是单进程单线程运行的。
在这里插入图片描述
我们都知道Redis有两种持久化的方式,一种是RDB,一种是AOF。

拿RDB举例,执行bgsave,就意味着 fork 出一个子进程在后台进行备份。

这也就为什么执行完bgsave命令之后,还能对该Redis实例继续其他的操作。


结论二:单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。

为了解释为什么Redis以单线程的方式处理数据性能会比较高,这里需要先讲一点多线程的知识。

多线程并不一定意味着快。
在这里插入图片描述
上图我们可以看到,这两个线程所执行的任务都是计算型任务。

一个CPU处理多个请求会导致单个请求响应时间过长;而且频繁切换线程上下文会增加性能损耗。

那为什么我们还总是使用多线程?
在这里插入图片描述
我们知道,大多数任务中都会涉及到网络请求、IO读取(包括文件、数据库等)等操作,这些都会产生一定的阻塞问题,那么这时候多线程就产生作用了。

当线程-3发生阻塞时,如果不进行切换,那就是白白占用CPU的资源,此时CPU是空闲的;反之,切换到其他线程,CPU则执行其他线程的任务,不至于没事情可干、偷偷在摸鱼。

这也就是为什么Redis处理大部分请求时都是单线程的,并因此获得显著的性能。就是因为Redis处理的这些请求都是计算型,并且Redis是纯内存操作,再加上带有I/O多路复用功能。

纯属个人见解,如有错误,欢迎指出。

Node.js单线程高并发原理:Event Loop架构深度解析 Node.js的‘单线程’并非性能缺陷,而是基于事件驱动模型的主动设计选择。其核心在于Event Loop——一套分阶段执行的异步调度机制,依托操作系统I/O多路复用(如epoll)将阻塞等待转为非阻塞通知,从而规避多线程的上下文切换、内存开销与锁竞争问题。这种架构天然适配I/O密集型场景,如实时通信、API网关与微服务边缘节点,在云原生和Serverless环境中展现出冷启动快、资源占用低、横向扩展清晰等技术优势。理解Event Loop各阶段(Timers、Poll、Check等)的行为边界与micro 阅读详情

相关推荐

这套Github上40K+star面试笔记,可以帮你搞定95%以上的Java面试

而且程序员在应聘时更是需要经历层层面试。俗话说,磨刀不误砍柴工,做好面试前的准备工作可以帮助大家更好地应对面试官的问题以及面试中的突发情况。这份PDF文档通过大量真实案例,全面总结了Java面试中的各个知识点和问题,给出了标准答案,还提供了一些面试技巧。相信通过认真学习,大家一定可以在面试中表现出色,提高自己通过面试的概率!

m0_71777195的博客 1188

Redis单线程原理

Redis单线程原理 Redis是单进程单线程的,Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有到达服务端的...

weixin_41924879的博客 1898

Node.js+SQLite 实战:从选型到踩坑,打造零配置本地持久化方案

嵌入式数据库凭借零部署、文件级存储的特性,成为本地数据持久化的高性价比选择。SQLite作为典型嵌入式关系型数据库,将数据保存在单个.db文件中,读写无需独立服务进程,天然契合Node.js单线程模型。在中小型应用场景(如爬虫数据存储、本地仪表盘、批量任务中间态缓存)中,相比MySQL等重型数据库,它显著降低运维成本。通过better-sqlite3驱动,可实现同步API的高效增删改查;开启WAL模式与busy_timeout,能规避并发读写锁冲突;配合事务批量写入,单次提交即可处理数万条数据。本文从选型对

weixin_32642109的博客 105

java面试题(二十)中间件redis

参考答案Redis支持如下两种过期策略:惰性删除:客户端访问一个key的时候,Redis会先检查它的过期时间,如果发现过期就立刻删除这个key。定期删除:Redis会将设置了过期时间的key放到一个独立的字典中,并对该字典进行每秒10次的过期扫描,过期扫描不会遍历字典中所有的key,而是采用了一种简单的贪心策略。从过期字典中随机选择20个key;删除这20个key中已过期的key;如果已过期key的比例超过25%,则重复步骤1。

weixin_60257072的博客 2910

DIY音频必备:手把手教你用AB类功放模块打造高保真桌面音响(含电路图)

本文详细指导如何利用AB类功放模块DIY高保真桌面音响,涵盖选型指南、核心元器件清单、电路搭建与焊接工艺,以及系统调试与音质优化技巧。AB类功放以其接近A类功放的音质和B类功放的效率,成为音频爱好者的理想选择,适合有一定电子基础的实践者。

weixin_42665725的博客 441

SCRFD算法解读及环境安装实践

SCRFD检测算法及环境安装

lishanlu136的博客 1009

Redis单线程模型

1、Redis单线程模型初步理解 针对每次请求调用,Redis都需经历接受命令、执行命令和返回结果三个过程。其中,执行命令阶段,因Redis是单线程处理命令,于是每一条到达redis服务端的命令不会立刻执行,而是所有命令都进入一个队列中,然后逐个被执行。多个请求端发送来的命令的执行顺序是不确定的,但可以确定的是不会有两条命令被同时执行,也就是不会产生并发问题,以上便是Redis的单线程基本模型。 2、详细描述 1、Redis 将每个客户端都分别关联一个指令队列;客户端的指令通过队列来按顺序处理,.

春风化雨 861

手把手教你搭建《黑色沙漠》单机版:从下载到联机的完整指南(含GM工具使用)

本文提供《黑色沙漠》单机版从下载安装到GM工具使用及局域网联机的完整教程。详细解析不同版本选择、系统配置要求、常见问题解决,并分享GM工具高级命令和局域网联机设置技巧,帮助玩家轻松搭建个性化游戏环境。

weixin_28738165的博客 467

Redis 是单线程的正确理解

一、为什么Redis是单线程的 1️⃣官方答案 因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。 2️⃣性能指标 关于 Redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求。 3️⃣详细原因 不需要各种锁的性能消耗 Redis 的数据结构并不全是简单的 Key-Value,还有 list,hash 等复杂的结构。这些结构有可能会进行

ChineseSoftware的博客 6403

从ENVI SARscape到SNAP:手把手教你迁移哨兵1 GRD数据预处理流程(含避坑指南)

本文详细介绍了从ENVI SARscape迁移到SNAP处理哨兵1 GRD数据的全流程,包括工具哲学差异、数据准备注意事项、核心处理流程等效实现及地形校正技巧。特别针对雷达数据预处理中的常见陷阱提供避坑指南,帮助用户高效完成工具迁移并确保结果质量。

weixin_28677005的博客 485

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导)

注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。

u011699626的博客 2446

Redis7_10 高阶篇 第一章 Redis是单线程还是多线程?

直接回答redis是单线程或是多线程,都是不严谨的。这就好比直接回答java中有泛型(jdk5才有),和Java中有lambda表达式(jdk8才有)一样不严谨。 Redis4之前,redis是单线程的。 Redis4开始逐渐的引入部分多线程。(比如异步删除) Redis6/7全面支持了多线程,主线程中也有了多路的io复用。

qq_33168558的博客 1513

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

bfq05234214的博客 415

mysql是单线程还是多线程_面试官问你redis是单线程还是多线程该怎么回答?

近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到redis数据格式、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,就redis单线程,这篇文章做一个简单介绍Redis采用的是基于内存的采用的是单进程单线程模型的KV 数据库,由...

weixin_34305091的博客 1026

游戏客户端开发工程师笔试题

1、已知有一个关键字序列:(27,23,34,14,1,55, 20,19,85,83,10,68)散列存储在一个哈希表中,若散列函数为H(key)=key%7,并采用链地址法来解决冲突,则在等概率情况下查找成功的平均查找长度为(4、出现死锁时,除了可以采用资源剥夺的方法解决死锁问题外,还可以使用的方法是()是被限定只能在表的一端进行插入运算,在另一端进行删除运算的线性表.5、大端模式,是指数据的高字节保存在内存的(3、在二叉查找树中, 最好情况下复杂度为。)地址中,而数据的低字节保存在内存的(

博客 1870

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

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

听说今年2020-1024=996?程序员今年注定要加班?看完这个Redis总结让你早点下班!

Redis 是什么?最为目前炙手可热的 Key-Value 数据库,常用做缓存、Session共享中间件,分布式锁等等。在找工作的过程中,对于 Redis技术知识的掌握已经成为必须的技能。文本将全面的讲解Redis方面的知识,深入浅出的帮助大家了解Redis。 另外本人整理了20年面试题大全,包含spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,下图是部分截图,需要的话点这里点这里,暗号优快云。 1、什么是Redis? Redis 是完全开源免费的, 遵守 BS.

qq_50524970的博客 4521

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

关于redis探究2-----分布式部署,io通信模型,分布式锁等内容的学习与研究

前言 在之前我有写过关于redis相关数据结构的学习文章,本文接着上文的步骤,来研究一些redis一些其他特性方面的内容,从而更加全面的掌握与了解redis的使用。 本文大概会根据个人使用的心得去总结和探讨关于redis的io通信模型,redis相关持久化以及redis在分布式部署情况下的一些注意事项和相关方法与原理。最后再来学习一下redis作为分布式锁等使用场景。文章内容可能稍显杂乱。 关于r...

qq_38801925的博客 228

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Redis为什么这么快?经典面试题

面试题其一,Redis为什么这么快

weixin_43903312的博客 429

Redis最常见面试问题

1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Reids的特点

JavaAlliance 584

Redis

之前不停听说redis,但一直很好奇不知道是什么。借着这篇文章,简单的了解一下。希望能说明白以下三个问题1.redis是什么?2.redis有什么优点?优点从何而来?3.redis的一些问题。

gls_nuaa的博客 215

Node.js事件循环与单线程真相:I/O密集型架构核心解析

Node.js常被误读为‘单线程阻塞模型’,实则是基于事件驱动的异步I/O调度系统。其核心在于事件循环(Event Loop)协调JavaScript主线程、V8引擎、libuv线程池与操作系统内核四层协作,将耗时操作卸载至后台,实现高并发低延迟。这种设计天然适配I/O密集型场景——如实时通信、API网关、流式数据处理,但不擅CPU密集型任务。理解event loop阶段(timers、poll、check等)与微任务/宏任务执行顺序,是避免回调地狱、定时器失准、长尾延迟等生产问题的关键。结合V8内存机制与

weixin_30765505的博客 332

Java高级:mysql数据库存放路径

前言 面试前就有听说过字节比较考验算法,面试的时候果然是,还好自己刷题比较多,这也验证了一个说法,大家在面试字节等目前比较火的互联网公司,一定要记得多刷题,文末会有自己面试的时候准备好的面试题PDF文档,有注意各位查漏补缺,有需要的可以找我免费获取到,这次面试的答案我也已经整理出来了,文末会有获取方式! 具体的面试题,大家看正文吧! Redis 什么是Redis? Redis的数据类型? 使用Redis有哪些好处? Redis相比Memcached有哪些优势? Memcache与Redis的区别都有哪些?

m0_56710876的博客 334

2023年11月 Java 面试题短期突击攻略,已帮助 400+ 位程序员成功拿到 offer

作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能。然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 万,而自己却囊中羞涩。于是你也想看看新机会,找个新平台,好好发展。但是面试的时候,当那个笑眯眯的面试官问出那些你再熟悉不过的 Java 问题时,你只是感觉似曾相识,却怎么也回答不到点上。比如 HashMap 的工作原理,再或者 volatile 的使用场景。

qq13321123的博客 921

手搓直播间高并发环境:从单机到8万在线全记录

高并发系统设计是后端工程师的核心挑战,但不同场景的并发模型截然不同。电商秒杀聚焦写冲突,而直播系统更考验读放大与扇出能力:同一路视频流需复制给数万观众,一条弹幕要实时广播全网,海量TCP长连接需稳定维持。本文从通用技术视角切入,剖析直播高并发的底层原理,并以上手实践的方式展示从Nginx RTMP到SRS集群、从Servlet到Netty长连接网关、从直连Redis到Cluster化缓存的演进过程。文章不仅解决直播系统怎么搭,更强调通过压测发现瓶颈、用异步化与集群扩展提升吞吐的工程方法论。无论是消息队列削峰

weixin_32642109的博客 108

第17章:Celery Worker 并发模型——prefork / gevent / eventlet / threads

Celery 提供 prefork(多进程)、gevent/eventlet(协程)、threads(线程)和 solo 五种并发模型。prefork 适合 CPU 密集和需崩溃隔离的任务,但内存成本高;gevent 通过协程让出 IO 等待,适合高并发 IO 密集型任务(如短信),但 CPU 密集时反而不如 prefork;threads 介于两者。选型需按任务类型定并发数,压测验证。核心原则:IO 密集用 gevent,CPU 密集用 prefork,关键任务需隔离选 prefork。

davidwang456的专栏 309
上一篇: 《Java并发编程实战》学习笔记(3)
下一篇: 《Java并发编程实战》学习笔记(4)
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值