Redis知识概览

玩归玩,闹归闹,别拿学习开玩笑…

写在开头

想必作为一个后端开发对Redis必然不陌生,无论是互联网巨头阿里还是小到十几人的创业公司,都在使用的开源技术。源码地址: https://github.com/antirez/redis 作者:Antirze,帅的不像实力派。

大家都熟悉的redis,基于内存、I/O多路复用、C语言实现、单线程、数据结构简单,这些标签使得Redis名声大噪,广泛使用于各种场景。

那么Redis的整体架构是什么样子的呢,下面通过一张图来详细聊一下。

20191215157641287374646.png

通过图的结构可以看出,整体分为客户端、服务端。

客户端redis-cli:通过linenoise插件进行监听用户输入的命令请求,发送至服务端,解析服务端响应,stdout(标准的输出)

服务端redis-server:初始化服务器、事件循环(eventLoop)、I/O多路复用通信模型、文件事件、时间事件(主要为serverCron)。

色值说明的主要释义:

epoll:I/O多路复用的基础模型

事件(events):文件事件和时间事件

命令处理器:连接应答处理器(acceptTcpHandler)、命令请求处理器(ReadQueryFromClient)、命令回复处理器(sendReplyToClient)

连接过程:客户端发起连接请求、服务端进行socket连接

命令处理过程:客户端发送set hset hget等命令请求、服务端处理

命令响应过程:服务端将处理命令的结果返回给客户端

主要的过程为:

  1. I/O多路复用,基于epoll进行实现(当然还有别的像select、poll等),epoll是什么可以自己进行查阅资料。

    主要方法:创建epoll_create、注册epoll_ctl、收集等待epoll_wait三个方法。

    epoll监听的就是套接字(socket),当socket有变化时,将会触发执行epoll注册时绑定的处理器。

    1. 当服务端启动的时候:进行epoll_create,服务端监听6379端口,epoll_ctl注册文件事件(通俗的讲,就是把6379监听这个任务交给了epoll),绑定了连接应答处理器(acceptTcpHandler)

    2. 当有新的客户端连接请求时:epoll_wait就可以获得对应的事件,进行执行,也就是图中命令处理器中的”处理连接“,处理连接中完成基本操作后,又注册了一个文件事件绑定了命令请求处理器(ReadQueryFromClient)

    3. 客户端发起命令请求:write(比如set key msg),此时套接字变得可读readable,执行b中绑定的处理器,也就是图中”处理执行“,处理完成后又注册了一个文件事件,绑定了命令回复处理器(sendReplyToClient)

    4. 客户端准备好读取响应:触发c中绑定的处理器也就是图中的”响应回复“。

至此一个完整的连接及命令处理响应完成。

lemon wechat
欢迎大家关注我的订阅号 SeeMoonUp
写的不错?鼓励一下?不差钱?