Redis为何那么快-----底层原理浅析

Redis的快速很多人都知道是因为基于内存,但这只是一方面,其实redis在底层是一套很完善的多路复用事件处理机制来保证执行的高效的

线程模型

redis内部使用文件事件处理器file event handler,它包含如下几个部分

  • 多个socket
  • IO多路复用程序
  • 文件事件分派器
  • 事件处理器(连接应答处理器,命令请求处理器,命令回复处理器)

之所以说redis是单线程其实是指这个文件事件处理器是单线程的,它采用多路复用的方式监听系统上多个socket,将socket上产生的事件压入队列中,由文件事件分派器从队列中取出一个socket根据事件类型发给相应的事件处理器
整个处理过程如图:


image.png

处理过程可以分为以下几个步骤:

  • 客户端向redis发起一个socket请求,向redis的server socket请求连接,这里命名为socket01
  • server socket产生一个AE_READABLE事件,IO多路复用程序监听到事件后将这个socket01压入队列
  • 文件事件分派器从队列中取出socket01,交给连接应答处理器
  • 连接应答处理器会将socket01的AE_READABLE事件与命令请求处理器相关联
  • 假设客户端执行set操作,这时命令请求处理器会从socket01读取key value,在内存中完成key value的设置
  • 在内存中完成设置后,会将socket01的AE_WRITEABLE事件与命令回复处理器相关联,然后压入队列中
  • 事件分派器拿到socket01后,交给命令回复处理器,由命令回复处理器向socket01写入本次操作的结果,比如OK,之后解除关联
    以上就是一个命令在redis中执行的过程

总结一下效率高的原因

  • 内存操作
  • IO多路复用机制,减少了阻塞
  • 单线程避免了线程切换的开销和竞争问题
  • 最最根本的redis是用C语言写的,本来就直接跟操作系统交互,命令执行快得飞起
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试题剖析 为什么要用缓存? 用缓存,主...
    jsbintask阅读 9,224评论 0 217
  • 为什么要用缓存? 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作mysql,半天查出...
    _云起阅读 7,402评论 1 50
  • Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务...
    猪大金阅读 589评论 0 1
  • 1.memcached和redis有什么区别? (1)Redis支持服务器端的数据操作redis和memcache...
    一条路上的咸鱼阅读 847评论 0 3
  • 你不曾回来冬风又起四海炭火已歇,灵魂寂灭天地浩大,盛不下念想 旧时的景里,可有野花山坡上烂漫灰烬乱舞,绕到天堂 一...
    插班生君阅读 173评论 0 5