Redis的单线程本质

1. 核心单线程部分
客户端请求
网络I/O读写
命令解析
内存数据操作
响应返回
  • 单线程范围(图中红色部分):
    • 网络I/O(接收请求/返回响应)
    • 命令解析(RESP协议解码)
    • 内存数据操作(读写键值对)
2. 多线程部分
fork子进程
fork子进程
lazyfree线程
异步线程
持久化RDB
BGSAVE
持久化AOF
BGREWRITEAOF
异步删除
UNLINK
集群同步
数据复制

单线程工作流程图解

ClientSocketQueueFileEventDispatcherCommandProcessorMemoryDB发送请求(非阻塞)监听就绪事件loop[IO多路复用(epoll/k-queue)]分发就绪请求(单线程)执行命令(GET/SET等)返回数据响应结果ClientSocketQueueFileEventDispatcherCommandProcessorMemoryDB
关键步骤说明
  1. 网络I/O阶段(多路复用)

    • 使用epoll监听上万连接,将就绪事件放入队列
    • 非阻塞:内核态完成,不占用主线程
  2. 命令处理阶段(单线程)

    • 从队列取出命令,顺序执行以下操作:
      def process_command(cmd):parse_command(cmd)      # 解析命令(单线程)execute_in_memory(cmd)  # 内存操作(单线程)prepare_response(cmd)   # 生成响应(单线程)
      
  3. 响应返回阶段

    • 将结果写入内核缓冲区(非阻塞)
    • 由操作系统完成网络传输

为什么单线程还能高性能?

优化点实现方式
纯内存操作数据完全在内存中,操作耗时在纳秒级
IO多路复用epoll实现高并发连接管理(单线程处理数万连接)
无锁竞争单线程天然避免锁开销
高效数据结构全局哈希表(O(1)复杂度)+ 跳表/压缩列表等优化结构
系统调用优化批量写入缓冲区(减少用户态/内核态切换)

单线程模型的限制

1. 阻塞风险点
KEYS *
全表扫描阻塞
大Key删除
内存回收阻塞
持久化fork
内存翻倍压力
2. 解决方案
  • 危险命令替换
    • KEYS *SCAN 分批迭代
    • FLUSHDBFLUSHDB ASYNC
  • 大Key拆分
    • Hash分片:HSET user:1000 profile1 "{...}"
    • 值压缩:使用MessagePack/Protocol Buffers

Redis 6.0多线程扩展

1. 多线程I/O(非命令处理)
# redis.conf
io-threads 4           # 启用4个I/O线程
io-threads-do-reads yes # 启用读线程
2. 线程分工
分发读任务
分发读任务
解析后的命令
解析后的命令
分发写任务
主线程
IO线程1
IO线程2
主线程执行
IO线程3

总结

  1. 单线程部分

    • 命令解析、内存数据操作、响应生成
    • 保证原子性,无需锁竞争
  2. 多线程部分

    • 网络I/O(6.0+)、持久化、异步删除、集群同步
  3. 性能关键

    • 内存操作 + IO多路复用 + 无锁设计
  4. 演进趋势

    • 保持核心单线程,外围功能多线程化

通过这种设计,Redis在保证简单性的同时实现了高性能。生产环境中应避免长耗时操作,充分利用Pipeline和Lua脚本优化吞吐量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93612.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93612.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93612.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件权限值的表示方法

文章目录字符表示方法8 进制数值表示方法字符表示方法 Linux表示说明Linux表示说明r--只读-w-仅可写--x仅可执行rw-可读可写-wx可写可执行r-x可读可执行rwx可读可写可执行---无权限 8 进制数值表示方法 权限符号8进制2进制r4100w2010x1001rw6110rx5101wx3011rwx7111---0000

【38】WinForm入门到精通 ——WinForm平台为AnyCPU 无法切换为x64,也无法添加 x64及其他平台

WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要应用。.NET 提供了大量 Windows 风格的控件和事件,可以直接拿来使用。本专栏内容是按照标题序号逐渐深入…

门控激活函数:GLU/GTU/Swish/HSwish/Mish/SwiGLU

10 门控激活函数 10.1 GLU:门控线性单元函数Gated Linear Unit10.2 GTU:门控Tanh单元函数Gated Tanh Unit自门控激活函数(Self-gated activation function)是一种通过自身机制动态调节信息流动的激活函数,其核心在于模…

Linux内核IPv4多播路由深度解析:从数据结构到高效转发

多播路由是网络通信的核心技术之一,Linux内核通过精密的多层设计实现了高性能的IPv4多播路由功能。本文将深入剖析其核心实现机制,揭示其高效运转的秘密。一、核心数据结构:路由系统的基石1. 多播路由表(struct mr_table&#xff…

ffmpeg-7.1.1 下载安装 windows 版,MP4 转 m3u8 切片,遇到报错 Unrecognized option ‘vbsf‘的解决办法

工作中偶尔会需要造指定大小的文档文件,不要求内容,可以随意填充任意无毒内容,所以打算用ts文件填充,现记录下过程。一、下载 ffmpeg废话不多说,上链接,https://ffmpeg.org/会跳转新页面,向下拉…

Linux网络编程:网络基础概念(下)

目录 前言: 一、网络传输基本流程 1.1、认识MAC地址 1.2、认识IP地址 二、socket编程预备 2.1、端口号 2.2、传输层的代表 2.3、网络字节序 2.4、sockaddr 结构 总结: 前言: 大家好,上一篇文章,我们说到了…

亚马逊广告进阶指南:如何优化流量实现新品快速起量

“新品上架如何快速获取精准流量?”“如何降低ACOS同时提升转化率?”“竞品流量拦截有哪些高效方法?”“关键词广告和ASIN广告如何协同投放?”“人工投放效果不稳定,AI工具真的能解决问题吗?”如果你也在思…

路径平滑优化算法--Clothoid 路径平滑

路径平滑优化算法–Clothoid 路径平滑 文章目录路径平滑优化算法--Clothoid 路径平滑0 为什么选 Clothoid?1 数学基础:严谨推导(Mathematical Foundation)可视化解释1.1 曲率线性假设1.2 切向角(Heading Angle&#…

PCB学习笔记(一)

文章目录一、PCB的制作过程了解1.1 覆铜板一、核心作用:制作印制电路板(PCB)二、不同类型覆铜板的针对性用途三、延伸应用1.2 覆铜板和信号线的关系一、覆铜板不是“全是铜”,原始结构是“绝缘基材铜箔”二、信号线就是铜&#xf…

【19】C# 窗体应用WinForm ——【列表框ListBox、复选列表框CheckedListBox】属性、方法、实例应用

文章目录9 复选列表框CheckedListBox10. 列表框ListBox10.1 实例:买菜10.2 实例:购菜 应用二WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要…

新注册企业信息查询“数据大集网”:驱动企业增长的源头活水

商贸繁荣的齐鲁大地上,“赶大集”曾是千年传承的民间智慧。而今天,一场以新注册企业信息为核心的“数据大集”正悄然重塑商业生态——数据大集网,以“聚天下好数,促万企互联”为使命,将分散的企业信息转化为精准商机&a…

项目目标如何拆解,才能提高执行效率和效果

项目目标要有效拆解以提高执行效率和效果,需要遵循以下关键步骤:明确整体目标、划分阶段性目标和里程碑、具体化任务细分并设定优先级、分配明确的责任人和时间节点、持续跟踪与反馈调整。其中,划分阶段性目标和里程碑尤为重要,通…

spring-ai-alibaba动态 Prompt 最佳实践

Spring AI Alibaba 使用 Nacos 的配置中心能力来动态管理 AI 应用的 Prompt。以此来实现动态更新 Prompt 的功能。 环境准备 Nacos: 具备配置中心能力的 Nacos,本例中使用 Nacos 3.0.2。Nacos 2.X 亦可, spring-ai版本1.0.0 ,spring-ai-al…

基于词频统计、关键词提取、情感分析与AI大模型自动生成系统的设计与实现

文章目录有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主一、研究背景与项目意义二、项目目标与研究内容三、系统架构与功能模块1. AI对话生成模块2. 分词与关键词提取模块3. 情感分析模块4. 行为预测模块5. 系统管理模块6. 可视化展示模块四、技术…

JVM工具

首先,JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具。 一、jps(Java Process Status) 用于查看有权访问的虚拟机的进程,并显示他们的进程号 -v:列出虚拟…

VisionPro系列讲解 - 03 Simulator 模拟器使用

一、VisionOS Simulator 简介 VisionOS Simulator 模拟器是专为 VisionOS 操作系统开发的调试和测试工具。它允许开发者在没有实际硬件设备的情况下,在计算机上模拟 VisionOS 环境,进行应用的开发、调试和优化。该模拟器帮助开发者快速验证应用的功能和界…

huggingface是什么?2025-07-30

huggingface被我看做是ai模型的试用空间 体验了一下image edit的功能,去除背景的功能不错 models 模型库 dataset 目前对我来说没用 spaces huggingface的spaces是什么? 演示空间吧。 令人震惊的背景移除能力H200是什么?

mysql索引下推和索引失效

索引下推:ICP过滤的条件可以不限于用于索引查找(index lookup)的字段。只要存储引擎在扫描当前索引时能够访问到该字段的值,就可以用它来过滤。索引可以分为聚簇索引和非聚簇索引没有索引下推:当使用聚簇索引的时候&am…

【电赛学习笔记】MaixCAM 的OCR图片文字识别

前言 本文是对MaixPy官方文档 MaixCAM MaixPy 实现 OCR 图片文字识别 - MaixPy 的项目实践整理与拓展,侵权即删。 功能介绍 OCR是MaixCAM中功能强大的数字文字识别模块,可以做到轻松的识别各种数字与文字。 OCR官方例程解析 工程源码 from maix im…

如何在生成式引擎优化(GEO)中取得成功

如果你希望您的内容出现在 AI Overviews、ChatGPT 和 Gemini 中?以下是设置 GEO 广告系列的方法。 任何好的 GEO 活动的第一步是创造一些东西实际上想要链接到或引用。 GEO 策略组件 想象一些你合理预期不会直接在 ChatGPT 或类似系统中找到的体验: 例如…