Skip to content

1. 基础原理 ​

目标:能用 1~2 分钟讲清「Redis 是什么、为什么快、线程模型怎么演进」,并落到生产注意点。


Redis 是什么 ​

基于内存的高性能键值存储。除 String / Hash / List / Set / ZSet,还有过期、持久化、Pub/Sub、Stream、Lua、弱事务等。

我在项目里主要当:

  • 缓存层(热点读)
  • 分布式协调(锁、限流、计数)
  • 临时状态(登录会话、验证码、短时标记)

不是替代 MySQL 的持久业务库。


为什么快(口述四条) ​

  1. 内存访问,避免磁盘随机 IO
  2. 高效数据结构(如 SDS、跳表、压缩结构按量切换)
  3. I/O 多路复用,单线程处理命令也能撑高并发连接
  4. 命令简单,多数 O(1) / O(log N),避免复杂查询计划

加分:快不等于无限快——大 Key、热 Key、慢命令、网卡都会拖垮体感。


单线程 / 多线程 ​

经典说法: Redis 执行命令的主线程是单线程的,所以单命令原子、无锁竞争。

容易踩坑的理解:

  • 「单线程」指命令执行,不是整个进程只有一个线程(还有 BIO 线程、Redis 6 的 I/O 线程等)
  • 一个慢命令(大 Key 的 HGETALL、KEYS *)会堵住后续所有命令

优化: 禁 KEYS,用 SCAN;删大 Key 用 UNLINK;拆大 Key;耗时逻辑放应用或异步。


IO 模型 ​

主线程用 epoll/kqueue 等多路复用 监听连接,可读时读入、解析、执行、写回。

连接再多,也是「一个线程轮询就绪事件」,所以并发连接成本远低于「一连接一线程」。


Redis 6 之后的线程模型 ​

Redis 6+ 引入可选的 I/O 线程:把读 socket / 写 socket 等部分工作并行化,命令执行仍主要在主线程,保证单命令语义简单。

口述:

6 之前瓶颈常在网络读写;6 之后可用多 I/O 线程提吞吐,但业务上仍要当成「命令串行执行」来设计,不能假设多个写命令在服务端并行交错执行同一逻辑。


核心优化清单 ​

点做法
慢命令监控 slowlog;禁 KEYS;控制返回体积
大对象拆 Key;分批删;UNLINK
连接连接池;避免每请求新建连接
版本生产注明大版本;I/O 线程按压测开

下一步:数据结构 · 性能