在高并发系统中(例如秒杀、热点商品查询、排行榜等),Redis 经常需要承担 几十万甚至百万 QPS 的访问压力。
要让 Redis 支撑百万 QPS,通常需要从 架构、数据设计、客户端、网络、系统优化 多个层面进行优化。


一、Redis 单机性能极限

首先需要了解 Redis 的基础性能。

Redis 单机性能通常:

环境QPS
普通服务器5万 ~ 10万 QPS
高性能服务器10万 ~ 20万 QPS

原因:

  • Redis 单线程模型
  • 内存操作
  • IO 多路复用

因此:

100万 QPS ≠ 单机Redis

必须通过 集群扩展。


二、Redis Cluster 横向扩展

Redis 支撑百万 QPS 的核心方式:

Redis Cluster

架构示例:

Redis Cluster
├── Node1
├── Node2
├── Node3
├── Node4
├── Node5
├── Node6

假设:

单节点 10万 QPS

6节点:

60万 QPS

10节点:

100万 QPS

Redis Cluster 使用:

16384 slots

数据分片到不同节点。


三、读写分离

Redis 支持 主从复制。

结构:

Master
↓
Slave1
Slave2
Slave3

写操作:

Master

读操作:

Slave

例如:

1写 + 3读

读性能提升:

3倍


四、本地缓存(减少 Redis 压力)

很多高并发系统会使用 两级缓存。

架构:

本地缓存
↓
Redis
↓
数据库

常见本地缓存:

  • Caffeine
  • Guava Cache

例如:

80%请求 → 本地缓存
20%请求 → Redis

Redis 压力降低:

80%


五、Pipeline 批量请求

Redis 网络 IO 也是瓶颈。

使用:

Pipeline

示例:

普通请求:

GET key1
GET key2
GET key3

Pipeline:

一次发送多个命令

效果:

减少网络往返次数

性能可提升:

5倍以上


六、Lua 脚本减少网络请求

Redis 支持:

Lua Script

例如秒杀库存:

普通方式:

GET stock
判断库存
DECR stock

需要:

3次网络请求

Lua脚本:

1次请求

同时保证:

原子性


七、热点 Key 优化

热点 Key 会导致:

单节点压力过大

解决方案:

1 Key 拆分

例如:

product:1001

拆分:

product:1001:1
product:1001:2
product:1001:3
product:1001:4

随机访问。


2 多副本 Key

例如:

rank:1
rank:2
rank:3
rank:4

客户端随机访问。


八、连接池优化

高并发系统必须使用:

Redis连接池

例如:

  • JedisPool
  • Lettuce

配置示例:

最大连接数:200
最小连接数:20

避免频繁创建连接。


九、网络优化

Redis 高 QPS 还需要网络优化。

例如:

使用内网通信

应用服务器 ↔ Redis

避免公网延迟。


使用高性能网卡

10G / 25G 网卡

减少网络瓶颈。


十、Redis 持久化优化

高并发场景通常:

关闭AOF

或者:

AOF everysec

避免磁盘 IO 影响性能。


十一、架构总结

Redis 支撑百万 QPS 通常需要:

Redis Cluster
读写分离
本地缓存
Pipeline
Lua脚本
热点Key拆分
连接池优化
网络优化

最终架构:

客户端
↓
本地缓存
↓
Redis Cluster
↓
数据库


十二、面试高分回答总结

如果面试官问:

Redis 如何支撑百万 QPS?

可以这样回答:

Redis 单机通常只能支撑 10 万 QPS 左右,要达到百万 QPS 通常需要通过 Redis Cluster 进行水平扩展,同时结合读写分离、本地缓存、Pipeline 批量请求、Lua 脚本减少网络开销,以及热点 Key 拆分等优化手段,从而实现百万级并发访问能力。