文章字数:590,阅读全文大约需要2分钟
- 完全基于内存,读写速度非常快
- 数据结构采用哈希表的形式,操作时间复杂度O(1);(有序列表内的数据存储用到了跳表)
- 数据结构简单,所以对于数据的操作也简单
- 单线程,避免上下文切换以及锁的问题
- 多路
I/O
复用模型,非阻塞IO
- 改造了
VM
机制,对于系统的调用更快
多路 I/O 复用模型
多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
- 多路:多个网络连接请求
- 复用:复用一个线程去处理
单线程
官方的解释是
cpu
不是redis
的瓶颈,机器的内存和网络带宽才更可能是。所以采用更简单的单线程这里的单线程只是处理网络请求时是单线程
为了有效利用多核
cpu
,可以在一个服务器上部署多个redis
,采用 主-从\主-主 形式。
多线程
6.0版本之后增加了worker
线程的子线程,用于处理命令的io
操作,worker
专注于命令处理。每个命令开一个新的子线程处理结束和返回结果的io
。