单线程理解
Redis 的所有命令执行,相当于进入一条单行高速公路。车只能一辆一辆串行通过,必须等前一个命令执行完后,才可执行下一个命令。这就意味着,同一瞬间,只且只有一条命令被执行。
Redis 单线程架构导致无法充分利用 CPU 多核特性。
为什么单线程那么快
- 纯内存(主要原因):响应速度快,响应时间平均 100ns(相当于:0.0000001 秒)
- 非阻塞IO:Redis 使用 epoll 系统调度方式进行读写
- 避免线程切换和竞态消耗
单线程需要注意什么
- 一次只运行一条命令
- 拒绝使用长(慢)命令,如:keys/flushall/flushdb/show lua script/mutil/exec等
- 其实 Redis 不是完全的单线程。在部分命令执行,是独立另外一个线程处理;如:fysnc file descriptior/close file descriptior