最近问了个兄弟一个问题,Redis是单线程?
你搞懂这个问题,需要了解Redis的底层实现。
首先,Redis的核心命令执行是单线程。
传统上大家说 Redis 单线程,指的是客户端请求的接收、解析、数据读写与命令执行,主要由主线程完成。
为什么要这样设计?
所有数据操作(GET / SET / INCR):串行执行。
无锁无线程竞争,没有锁开销,不会有并发冲突,性能极高(10w+ QPS)…….
但如果你只回答单线程,那就只回答对了一半。
Redis 还有后台线程、持久化相关任务……等繁重的工作要做。
针对 I/O 密集型或慢操作,Redis 亦可借助多线程来执行 AOF 写入或 RDB 读写等部分工作,从而减轻主线程压力。
所以,说Redis 不是“纯”单线程,而是一个以单线程为核心逻辑、多线程为外围辅助@mikechen