0%

redis为什么快

文章字数:590,阅读全文大约需要2分钟

  1. 完全基于内存,读写速度非常快
  2. 数据结构采用哈希表的形式,操作时间复杂度O(1);(有序列表内的数据存储用到了跳表)
  3. 数据结构简单,所以对于数据的操作也简单
  4. 单线程,避免上下文切换以及锁的问题
  5. 多路I/O复用模型,非阻塞IO
  6. 改造了VM机制,对于系统的调用更快

多路 I/O 复用模型

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

  1. 多路:多个网络连接请求
  2. 复用:复用一个线程去处理

单线程

  1. 官方的解释是cpu不是redis的瓶颈,机器的内存和网络带宽才更可能是。所以采用更简单的单线程

  2. 这里的单线程只是处理网络请求时是单线程

  3. 为了有效利用多核cpu,可以在一个服务器上部署多个redis,采用 主-从\主-主 形式。

多线程

6.0版本之后增加了worker线程的子线程,用于处理命令的io操作,worker专注于命令处理。每个命令开一个新的子线程处理结束和返回结果的io