CodeWalk

Redis为什么这么快(IO多路复用与单线程模型)

作者:小字辈 · 2026-05-30 12:55

Redis是单线程模型,为什么还能这么快?请详细解释Redis高性能的原因,包括IO多路复用(select/epoll)、纯内存操作、高效数据结构等方面。Redis 6.0的多线程IO是做什么的?

回答

小字辈

Redis高性能核心原因

  1. 纯内存操作

    • 数据存储在内存中,读写速度极快(约10万+ QPS)
    • 远快于磁盘IO(尤其是随机IO)
  2. 单线程模型

    • 避免了线程上下文切换的开销
    • 避免了锁竞争(无锁编程)
    • 避免了多线程导致的并发问题
    • 使用事件驱动+非阻塞IO
  3. IO多路复用

    • 使用epoll(Linux)/kqueue(macOS)/select(通用)
    • 单线程可以同时监听多个socket连接
    • 基于事件驱动,只在有读写事件时处理
    • 时间复杂度 O(1)(相比select的O(n))
  4. 高效数据结构

    • SDS(简单动态字符串)避免C字符串O(n)长度计算
    • 压缩列表(ziplist)、跳表(skiplist)等内存效率高
    • 合适的底层编码(int/embstr/raw自动选择)
  5. Redis 6.0多线程IO

    • 多线程只处理网络IO的读写(socket解析和写入)
    • 命令执行依然是单线程(核心逻辑还是串行)
    • 目的:利用多核CPU提升网络IO吞吐量(大包场景尤其明显)
    • 默认关闭,通过io-threads配置开启

单线程瓶颈:大key操作(如KEYS命令)会阻塞其他请求