2026-03-04 22:32:14
Redis 之所以速度快,除了 I/O 多路复用技术外,还有以下关键原因:
1. 纯内存操作
Redis 并非完全单线程,仅网络请求和数据操作模块为单线程(6.0 版本前)。
单线程设计避免了多线程的上下文切换和竞态条件,但并非性能快的主因。
Redis 6.0 引入多线程处理网络 I/O,显著提升高并发场景下的 QPS(如 GET/SET 命令性能翻倍)。
多线程仅用于网络 I/O,数据操作仍为单线程,保持语义一致性。
单线程足够应对 80% 的业务场景(80,000-100,000 QPS)。
多线程用于超大规模业务(如亿级交易量),减少集群部署成本。

String:基于 SDS(简单动态字符串),支持 O(1) 时间复杂度的长度获取和二进制安全存储(如图片、视频)。
Hash:散列表结构,适合存储对象字段,减少内存碎片。
List:双向链表,支持高效插入/删除操作。
Set/Zset:集合和有序集合,支持快速成员检查和范围查询。
每种数据结构针对特定场景优化,例如 Zset 使用跳跃表(Skip List)实现高效排序。
避免通用数据结构的冗余开销,提升操作效率。

SDS 根据字符串长度动态选择编码类型(如 sdshdr5、sdshdr16),避免内存浪费。
例如,小字符串使用 sdshdr5(仅 5 字节头部),大字符串使用 sdshdr64(64 位长度字段)。
整数压缩:小整数直接存储为整数类型,减少内存占用。
对象共享:对频繁使用的短字符串(如 "OK")进行内存共享,降低重复存储开销。
Redis 的高性能源于以下综合设计:
这些设计使 Redis 在缓存、计数器、消息队列等场景中表现卓越,成为高性能中间件的标杆。