
一、Redis 核心定位
本质:纯内存KV数据库 + 分布式缓存,采用C语言实现,代码库简洁(约3万行),由核心开发者维护,Bug率极低,支撑服务稳定性。
核心优势:亚毫秒级低延迟、高并发、高可用、多场景适配,依托纳秒级内存读写基础,可实现微秒级响应时间。
设计理念:极致优化内存操作、简化交互、保障数据安全与服务可用,简单架构降低故障率,便于调试和维护。
二、Redis 为什么这么快
架构层优势:单线程事件循环(无锁、无上下文切换开销)+ IO多路复用(Reactor模式,非阻塞、高并发)+ 全内存存储(纳秒级读写,微秒级响应),三者协同,彻底规避磁盘I/O瓶颈与多线程并发损耗,奠定高性能基础。
算法层优势:以O(1)时间复杂度操作为主,结合动态编码(按需切换底层实现)、高效底层算法(跳表、渐进式Rehash、LRU、LFU等),优化操作效率与内存占用,适配不同业务场景。
实现层优势:jemalloc/tcmalloc内存分配器减少内存碎片、提升复用率;RESP精简协议减少编解码与网络传输开销;异步后台线程避免主线程阻塞;Redis 6.0+网络I/O多线程优化,进一步突破网络瓶颈。
细节优化:Pipeline批量操作、零拷贝技术减少网络往返与数据复制开销;高效数据结构设计节省内存与解析开销;单线程无锁设计避免竞态问题;Lua脚本、事务实现命令原子执行,提升并发效率;RDB、AOF持久化优化,不阻塞主线程,兼顾数据安全与性能。
三、单机架构
内存数据库:数据全量存储于内存,实现纳秒级读写,规避磁盘I/O寻道延迟,可高速访问且无需等待磁盘I/O,支持RDB与AOF两种持久化机制。
事件驱动:基于Reactor模式,通过I/O多路复用监听客户端请求,提升并发处理效率,贴合单线程模型的事件驱动核心设计。
持久化双引擎:采用RDB快照(全量备份)+AOF日志(增量备份)的组合,支持混合持久化,兼顾数据安全与恢复效率,后续将详细展开具体实现。
四、运行模型
1、单线程主线程
核心机制:基于Reactor模式的事件驱动,单主线程集中处理所有客户端读写、计算命令,依托事件循环机制实现高效调度。
性能优势:无多线程上下文切换与锁竞争开销(上下文切换耗时可达微秒级),命令原子执行、天然线程安全;无锁设计简化架构,事件处理时间复杂度达到O(1),同时避免竞态条件,简化并发控制。
优化设计:引入异步后台线程,专门处理过期删除、AOF重写等耗时操作,避免阻塞主线程;单线程模型简化整体设计,减少并发相关Bug,降低调试与维护成本。
2、IO多路复用机制
底层实现:优先采用epoll(Linux环境),兼容kqueue/select实现跨平台适配,贴合单线程事件循环设计,支持非阻塞I/O操作。
性能优势:单线程可监听海量客户端连接(多socket),通过非阻塞IO避免空等,实现一核多并发;高效处理大量并发连接的同时,减少系统调用次数,降低性能损耗。
工作逻辑:由内核负责监听多个文件描述符,当有就绪事件(如客户端请求)时,及时通知主线程处理,确保主线程高效响应,不做无用等待。
3、多线程演进(Redis 6.0+)
核心优化:引入网络I/O多线程设计,可根据实际场景配置线程数,仅将网络I/O相关操作(连接建立、数据读写)交由多线程处理。
设计原则:命令执行仍保持单线程,兼顾高并发与命令原子性,既解决网络I/O瓶颈,又避免多线程并发带来的竞态问题,进一步提升网络读写效率。
五、内存架构
1、全内存存储模型
核心设计:所有数据全量存储于内存,读写操作直接作用于内存,数据结构设计紧凑,内存访问速度远超磁盘,无需等待磁盘I/O,实现微秒级响应时间。
性能优势:彻底规避磁盘I/O寻道与读写延迟,多数操作耗时可达O(1),奠定亚毫秒级延迟的基础;内存访问基于纳秒级速度,进一步放大性能优势。
内存优化:采用对象共享与引用计数机制,提升内存利用率;引入内存池管理,减少内存碎片;配合内存预分配与惰性释放策略,优化内存使用效率,降低内存重分配开销。
2、内存分配与管理
分配器选择:默认采用jemalloc内存分配器,也支持tcmalloc,替代C标准malloc,适配Redis的内存使用场景。
优化设计:按内存块大小分块分配,减少内存碎片,提升内存复用率;通过负载因子控制哈希表扩容时机,避免扩容过程中阻塞主线程,优化整体性能。
辅助优化:采用惰性释放策略,避免频繁释放内存带来的性能波动;对部分数据结构进行内存压缩,进一步降低内存占用。
3、内存安全机制
写时复制(Copy-on-Write):持久化过程中,子进程共享主进程内存空间,仅当主进程执行写操作时,才复制对应内存块,大幅减少内存占用,是RDB持久化的核心机制。
大Key检测:实时监控大Key(如单Hash存储百万级字段),避免单命令执行耗时过长阻塞主线程,保障服务流畅运行。
内存限制:通过maxmemory配置最大内存容量,防止内存溢出;配合过期删除与内存淘汰策略,确保内存合理利用,避免服务因内存不足异常。
六、网络架构
通信协议:采用RESP精简序列化协议,协议轻量易解析、支持二进制安全,减少编解码与网络传输开销,提升解析速度。
连接优化:支持非阻塞IO与连接复用,提升客户端连接效率,适配IO多路复用的非阻塞特性;引入零拷贝技术,让客户端缓冲数据直接发送至网络,避免内核态与用户态的数据复制,降低性能损耗。
命令优化:支持Pipeline管道、mset/mget批量命令,减少网络往返次数;支持Lua脚本与Multi/Exec事务,实现命令原子执行,提升并发场景下的执行效率。