将 Redis 的 QPS(每秒查询率)从 5w 提升到 50w,不仅是量级的跨越,更是从单机性能优化到架构方案升级的本质变化@mikechen
水平扩展(分片)
首先,通过将数据按键空间划分至多个 Redis 节点,分散单节点负载,实现并行处理能力的线性扩展。
基于一致性哈希或定长槽(如 Redis Cluster 的 16384 槽)进行路由,客户端或代理根据槽映射将请求定向到对应节点。

每个实例独立维护内存与事件循环,避免单点瓶颈。
比如:某电商会话系统将单节点 QPS 从 5 万拆分为 10 个分片后,总 QPS 达 50 万。
客户端 ↓ Hash Slot 路由 ↓ Redis Node A (15w) Redis Node B (15w) Redis Node C (15w) Redis Node D (15w)
通过使用 Redis Cluster 与客户端智能路由,避免跨节点事务与热点重分配。
读写分离与主从复制
将写请求集中到主节点,读请求分流到多个从节点,利用多副本并发承载读负载。
使用异步复制(主->从复制流)保证数据最终一致。

通过追赶复制位点(replication backlog)、与复制缓冲减少延迟。
客户端或代理(如 Twemproxy、Codis、Proxy)根据角色路由读写;若采用半同步或多主方案需权衡一致性。
案例:某社交平台在高峰期将读请求 80% 转向 4 个从节点。
主节点仍承担写入,系统整体 QPS 从 5 万提升至 40–50 万,同时通过监控复制延迟保障数据新鲜度。
内存与数据结构优化
通过优化键值设计、选择合适数据结构并降低内存占用与 CPU 解析成本,提高每个请求的处理效率,从而提升吞吐。
底层机制:采用压缩编码(ziplist、intset)、合理设置 maxmemory-policy、使用短键与紧凑值减少内存带宽。

避免过大单键(如超大 List/Set)导致 O(N) 操作;
利用批量操作(MGET、Pipelining)减少网络往返与事件循环触发次数;
开启 jemalloc/tcmalloc 等高效内存分配器减少碎片。
案例:某广告系统将用户画像从多个大哈希拆分并改用紧凑二进制编码,配合批量 MGET 与 pipeline,单实例 QPS 提升 2–3 倍,集群总 QPS 达 50 万。
网络与部署优化
降低网络延迟与系统调用开销,提升单连接吞吐,使 Redis 能更高效地服务大量并发请求。

使用长连接、TCP 选项(TCP_NODELAY)、调整内核网络参数(如 somaxconn、net.core.somaxconn、tcp_tw_reuse);
部署在高性能网络(10GbE/40GbE)、使用 CPU 亲和性与 NUMA 优化;
对于 Redis 6+,启用 I/O 线程(io-threads)来并行处理网络收发,保留主线程处理命令执行以避免语义问题;
在超高 QPS 场景考虑 RDMA 或以内存直连为主的硬件加速。
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。