redis为什么这么快

redis为什么这么快?

  1. 完全基于内存,绝大部分请求时纯内存操作,非常快速。数据在内存中类似于hashmap,hashmap的优势就是查找和操作的时间复杂度都是O(1)。
  2. 数据结构简单,对数据操作也简单,Redis的数据结构是专门进行设计的。SDS。
  3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或多线程切换导致的消耗cpu,不用去考虑各种锁的问题,不存在加锁释放锁的操作,没有因可能出现死锁而导致的消耗。
  4. 使用IO多路复用模型,非阻塞IO。
  5. 使用底层模型不同,他们之间底层实现方式以及客户端之间通信的应用协议不一样,Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

多路复用IO模型。

  1. 多路I/O复用模型就是利用select,poll,epoll可以同时监测多个流的I/O事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞中唤醒,于是程序就会轮询一遍所有流(epoll是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
  2. 这里的多路指的是多个网络连接,复用指的是复用同一个线程。采用多路I/O复用技术,可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈。

redis为什么是单线程的?

  CPU并不是redis的瓶颈,瓶颈在于内存的大小或者网络,redis中,网络IO模块采用单线程。
  这里的多路指的是多个网络连接,复用指的是复用同一个线程。采用多路I/O复用技术,可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈。