1、Redis单线程的纯内存数据库

   单线程保证了单个操作的原子性,避免了线程的上下文切换和竞争,多线程一般需要加锁,反而影响性能,redis单线程不用去考虑加锁问题;单线程多进程也不失为一种好的方案。

   基于内存读写速度快

2、Reids使用非阻塞IO,IO多路复用

  多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用技术。

  多路-指的是多个socket连接,

  复用-指的是复用一个线程。

  Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。

  采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。

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

3、数据结构也帮了不少忙,Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。

 

4、Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大

 

 

单进程单线程弊端 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;