美文网首页工作生活
Redis单线程为什么快?

Redis单线程为什么快?

作者: HRADPX | 来源:发表于2019-07-03 14:06 被阅读0次

Redis使用了单线程和I/O多路复用模型来实现高性能的内存数据库服务器。

1 Redis单线程为什么那么快?

  (1) 纯内存访问,Redis将所有数据放在内存中,内存响应的速度非常快。
  (2) 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现的,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多事件。

多路I/O复用模型是利用select、poll、epoll可以同时监察多个流的I/O事件的能力,在空闲的时候会把当前线程阻塞,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询所有流(epoll是只轮询真正发生事件的流),并且只依次顺序处理就绪的流。
select:
  需要传递参数,对于多个调用函数来说不友好。
  需要IO 流出现了数据,select只能轮询去找这些数据,对于大量的sock来说开销很大。
  线程不安全。
  只能监视1024个连接。
poll:线程不安全、无连接限制、不需传参,但是仍旧需要轮询所有流。
epoll:线程安全、不需轮询,但是只支持Linux系统。

  (3) 单线程避免了线程切换和竞态产生的消耗。

2 单线程优缺点

  优点:

(1) 单线程可以简化数据结构和算法的实现。
(2) 单线程可以避免竞态产生的消耗,锁和线程切换通常是性能杀手。

  缺点:

对于每个命令的执行时间有要求,如果某个命令执行过长,会造成其他命令阻塞,对于Redis这种高性能的服务来说是致命的,所有Redis是面向快速执行场景的数据库。

相关文章

网友评论

    本文标题:Redis单线程为什么快?

    本文链接:https://www.haomeiwen.com/subject/fzuqhctx.html