一、Redis 1.0~3.0 纯单线程模型
早期版本全程单线程:网络IO、命令执行、持久化、定时任务全部主线程串行执行。优势:简单、无锁、无竞争;劣势:大Key、慢命令直接阻塞全局。
二、Redis 4.0 演进:后台多线程(惰性删除Lazy Free)
4.0 之前删除大Key、清空集合会阻塞主线程,导致服务卡顿。4.0 引入后台异步线程,专门处理大Key删除、内存回收,主线程只负责业务命令,彻底解决删除阻塞问题。
核心改进:命令执行依旧单线程,释放内存操作异步多线程。
三、Redis 6.0 重大演进:IO多线程模型(核心面试点)
1. 优化背景
随着网卡带宽提升、单机QPS突破10W+,网络读写IO成为新瓶颈,CPU资源空闲但网络吞吐打满,单线程无法压榨多核性能。
2. 6.0多线程核心规则(重中之重)
多线程只负责网络IO,命令执行依旧单线程!
IO线程并行处理:Socket读取、协议解析、结果回写
主线程串行执行:所有Redis读写命令逻辑
完全规避线程安全问题,无需锁、不破坏原有架构
3. 6.0 IO多线程执行流程
主线程通过epoll监听所有连接,收集就绪Socket
将就绪连接分发至多个IO子线程并行读取请求、解析协议
所有请求汇总至主线程,串行执行命令逻辑
执行结果再次分发IO线程并行回写客户端
主线程等待IO线程完成,进入下一轮事件循环
4. 核心优势
充分利用多核CPU,网络吞吐性能提升一倍以上,彻底解决高并发网络IO瓶颈,同时保留单线程命令执行的简单、安全、无锁优势。
四、Redis 7.0 微调优化
优化IO线程调度策略、细化任务粒度、降低线程切换开销,进一步提升高并发稳定性。
五、线程模型总结(面试标准答案)
1. Redis 主线程命令执行始终单线程,保证线程安全、无锁、高稳定;
2. 4.0引入惰性删除后台线程,解决大Key删除阻塞;
3. 6.0引入IO多线程,仅并行处理网络读写,命令执行不变,大幅提升网络吞吐;
4. Redis不存在命令多线程并发执行,永远不存在线程安全问题。