Redis单线程与多线程概述
- Redis传统单线程: 主要指网络请求和数据操作由一个线程完成。
- Redis 4.0多线程: 引入部分多线程机制,但主要功能仍由单线程处理。
- Redis 6.0多线程: 引入多线程模型,主要针对网络请求处理,提高并发性能。
Redis单线程的原因
- CPU资源非瓶颈: Redis操作基于内存,CPU不是性能瓶颈。
- 磁盘IO非瓶颈: 基于内存操作,磁盘IO不是主要瓶颈。
- 网络IO为瓶颈: 早期通过IO多路复用技术应对,6.0版本引入多线程应对网络性能要求。
- 多线程弊端: 并发问题增加设计复杂性,上下文切换带来性能开销。
Redis单线程性能原因
- 避免共享资源竞争: 单线程模型减少线程切换开销。
- 高效的数据结构: 数据结构经过优化,具有高效率和空间效率。
- 基于内存操作: 减少IO时间。
- IO多路复用: 一个线程监听多个IO事件,提高IO利用率。
Redis 6.0引入多线程原因
- 复杂业务场景: 高交易量需求,单线程Redis无法满足。
- 网络IO瓶颈: 多路复用技术在高并发下可能成为瓶颈。
- 多线程优势: 减少网络I/O等待影响,充分利用CPU多核优势。
Redis网络模型
- Reactor模式: 基于Reactor模式,分发器模式。
- 单分发器单线程: 所有操作在单个线程完成,可能成为瓶颈。
- 单分发器多线程: 数据接收和发送由子线程处理,业务在主线程执行。
Redis多线程方案
- 改进单分发器多线程: 数据接收、发送和业务处理都在子线程中进行,避免主线程瓶颈。
- 保持单线程模型: 业务在主线程执行,保持设计一致性,减少修改成本。