单线程Redis为何可以支持10w+qps

Redis为什么这么快

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
2、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU;
3、使用多路I/O复用模型,非阻塞IO;
4、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

多路 I/O 复用模型

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

单线程redis和多核CPU

单一线程也只能用到一个CPU核心,所以可以在同一个多核的服务器中,可以启动多个实例,组成master-master或者master-slave的形式,耗时的读命令可以完全在slave进行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 2,175评论 0 9
  • 昨天考研成绩329,我很不满意,不过我觉得我能做的也都做了,先看这个结果吧,不管怎么我觉得老天爷都是在戏弄我,...
    小锌516阅读 213评论 0 0
  • -1- "你好,八月" 今天是2018年八月的第一天,转眼间一年间12个月已经过了八个月,剩下还有四个月,在这里提...
    三鹿麤阅读 324评论 2 2
  • 友盟 Application received signal SIGSEGV 然后找到当时上传代码时使用的DYSM...
    _风雨阅读 195评论 0 0