Redis如何抗住100万QPS?

1. 纯内存操作

这是Redis高性能的基石,Redis将所有数据存储在主内存(RAM)中,所有操作都直接在内存中进行。

Redis如何抗住100万QPS?-mikechen

相比于传统数据库需要进行耗时的磁盘I/O操作(如查找、读取、写入)。

内存访问速度,比磁盘快了几个数量级(纳秒级 vs 毫秒级)。

这极大地减少了操作延迟,使得Redis能够快速响应大量的并发请求。

 

2.多实例分片集群

分片,才是真正让你支撑百万级 QPS 的“硬核能力”。

Redis如何抗住100万QPS?-mikechen

要做到百万级 QPS,必须采用横向扩展:

Redis Cluster 水平扩展(最常用),给每个实例分配槽位,每个实例承担一部分数据与流量。

线性扩容吞吐,例如:

  • 单实例:15 万 QPS;
  • 10 个实例节点:150 万 QPS;
  • 20 个节点:300 万 QPS;

每个 master 有至少一个 slave,保证容灾。

分片策略,比如:

key hash;

客户端一致性 hash;

Cluster slot;

 

3. I/O 多路复用机制

I/O 多路复用机制,这是Redis如何高效处理大量并发连接的核心。

Redis使用操作系统的selectepoll(Linux)或kqueue(macOS/FreeBSD)等I/O多路复用技术。

Redis如何抗住100万QPS?-mikechen

它允许一个主线程,同时监听多个套接字(Socket)上的I/O事件。

比如:连接建立、数据到达、数据发送完成…等操作。

性能优势: 在等待客户端发送数据、或接收响应的空闲时间内。

主线程并没有阻塞,而是在监听其他套接字。

这使得单个线程可以高效地管理数以万计的并发连接,实现了高并发。

4. 优秀的数据结构

Redis不仅仅是简单的键值存储,它底层使用了高度优化的数据结构。

 Redis为不同的数据类型(String, Hash, List, Set, Sorted Set)设计了专门的、高效的底层数据结构。

Redis如何抗住100万QPS?-mikechen

例如:哈希表(Hash Table)、跳跃表(Skip List,用于Sorted Set)、压缩列表(Zip List)、快速列表(Quick List)等。

例如,哈希表的查找是$O(1)$,保证了极速的键值查找。

这些数据结构都是经过精心设计的,能够保证绝大多数操作(如查找、插入、删除)的时间复杂度为$O(1)$$O(\log N)$

mikechen睿哥

10年+一线大厂架构实战专家,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。

评论交流
    说说你的看法