跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

Redis 内部编码与单线程架构

Redis 介绍了常用的数据结构及其内部编码实现(如 String 的 raw/int/embstr,Hash/List/Set/ZSet 的 hashtable/ziplist/intset/skiplist),并解释了单线程架构下的高性能原因(内存访问、I/O 多路复用、无上下文切换)及潜在缺点(长命令阻塞)。

Qiny01发布于 2026/3/22更新于 2026/10/26111 浏览
Redis 内部编码与单线程架构

一、常用数据结构

Redis 对外说 values 常用的数据结构是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合)等等,但是其实内部实现在不同情况下也与常见的数据结构有一定的不同。

文章配图

二、内部编码

  • String 类型,有 raw,int,embstr 三种实现。

    • raw : 最基本的字符串,底层就是字符数组
    • int :当 value 就是一个整数的时候,Redis 直接使用 int 来保存
    • embstr:针对短字符串进行的特殊优化
  • hash 类型,有 hashtable,ziplist 两种实现。

    • hashtable:最基本的 hash 表
    • ziplist:在 hash 表元素比较少的时候,使用压缩列表,节省空间
  • list 类型,有 linkedList 和 ziplist 两种实现。

    • linkedlist:正常普通的链表
    • ziplist:list 元素较少的时候,使用压缩列表。
  • 在 Redis3.2 之后,使用 quicklist 代替上面两种。quicklist 就是一个元素是 ziplist 的链表。

  • set 类型,有 hashtable,intset 两种实现。

    • hashtable:hash 表
    • intset:集合中存的都是整数时使用
  • zset 类型,有 skiplist 和 ziplist 两种实现。

    • skiplist:跳表,每个节点有多个指针域,巧妙使用可以做到查询元素时间复杂度为 O(logN)
    • ziplist:元素较少的时候使用

可以使用 object encoding key 查看 key 对应的 value 的内部编码。

三、单线程架构

Redis 使用了单线程架构来实现高性能的内存数据库服务。

宏观上我们多个客户端可能会同时请求 Redis 服务器,但是实际上由于 Redis 服务器处理请求的是单线程,就算真的命令同时到达,也得排队串行执行。

文章配图

  1. 单线程还能这么快 (与关系型数据库相比) 的原因:因为 Redis 核心业务逻辑都是短平快的,不太吃 CPU 资源。

纯内存访问。Redis 将所有数据放在内存中,内存的响应时长约为 100 纳秒,这是 Redis 达到每秒万级别访问的重要基础。非阻塞 IO。Redis 使用 epoll 作为 I/O 多路复用技术的实现,再加上 Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间。单线程避免了线程切换和竞态产生的消耗。单线程可以简化数据结构和算法的实现,让程序模型更简单;其次多线程避免了在线程竞争同一份共享数据时带来的切换和等待消耗。

Redis 使用 I/O 多路复用模型:

文章配图

  1. Redis 单线程的缺点:如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于 Redis 这种高性能的服务来说是非常严重的。

目录

  1. 一、常用数据结构
  2. 二、内部编码
  3. 三、单线程架构

更多推荐文章

查看全部
  • 深入理解次模函数(Submodular Function)在机器学习中的应用
  • 纯 Java 手写 TopoJSON 生成器零依赖实现
  • Linux 下 Tomcat 结合内网穿透实现公网访问
  • Python 数据挖掘实战:回归、分类、聚类与关联分析详解
  • 图灵奖得主对人工智能发展的深远影响
  • JavaScript 基础知识详解
  • Mac Studio M4 通过 vLLM 部署本地大模型
  • C++ 模板基础:函数模板与类模板实战
  • 知识图谱基础概念详解:实体、关系与属性构建指南
  • OpenClaw 完全指南:开源 AI 助手部署与配置
  • ToClaw:不只是炫技 AI,更是易用的桌面工具
  • Python 网络爬虫技术详解:原理、实战与最佳实践
  • 强化学习基础:动态规划算法原理与实现
  • 云开发 Copilot:AI 驱动的低代码开发实践
  • 数据结构初阶详解线性表之队列
  • 基于Python+OpenCV实现自动扫雷
  • 数据结构:顺序表原理与实现
  • C++ 核心特性详解:函数重载、引用、内联函数、auto 与 nullptr
  • WebSocket 客户端实践:重连、心跳与可靠通信
  • 鸿蒙应用性能优化与原生合规实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online