单线程理解

Redis 的所有命令执行,相当于进入一条单行高速公路。车只能一辆一辆串行通过,必须等前一个命令执行完后,才可执行下一个命令。这就意味着,同一瞬间,只且只有一条命令被执行。

Redis 单线程架构导致无法充分利用 CPU 多核特性。

为什么单线程那么快

  1. 纯内存(主要原因):响应速度快,响应时间平均 100ns(相当于:0.0000001 秒)
  2. 非阻塞IO:Redis 使用 epoll 系统调度方式进行读写
  3. 避免线程切换和竞态消耗

单线程需要注意什么

  1. 一次只运行一条命令
  2. 拒绝使用长(慢)命令,如:keys/flushall/flushdb/show lua script/mutil/exec等
  3. 其实 Redis 不是完全的单线程。在部分命令执行,是独立另外一个线程处理;如:fysnc file descriptior/close file descriptior

附录

epoll 模型

image.png