当前位置:首页 > 经验 >

redis详细图解(redis面试必问的三大问题)

来源:原点资讯(www.yd166.com)时间:2022-10-31 23:16:12作者:YD166手机阅读>>

Redis服务器是一个事件驱动的程序,有以下两类事件:

  • 文件事件:Redis服务器通过套接字与客户端或者其他的Redis服务器连接,而文件事件就是服务器套接字操作的抽象。与客户端或者其它服务器通信产生相应的文件事件,服务器通过监听处理这些事件来完成一系列的网络通信操作。
  • 时间事件:Redis服务器中的一些操作(如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。

redis详细图解,redis面试必问的三大问题(1)

时间处理器结构

文件事件

Redis基于Reactor模式开发了自己的网络事件处理器,利用IO多路复用程序来监听套接字,当监听到连接应答、读取、写入、关闭等操作是,就会调用对应关联的事件处理器来处理。

文件事件处理器结构

redis详细图解,redis面试必问的三大问题(2)

文件处理器结构

Redis的事件框架由:I/O多路复用程序、aeMain主线程、事件分派、事件队列等几个核心元素组成,aeMain主线程一直轮询事件队列中就绪的I/O事件,然后通过事件绑定的处理器来处理业务。

文件事件执行过程

redis详细图解,redis面试必问的三大问题(3)

事件处理的过程

  • 服务器接收到客户端发送的建立连接请求
  • 多路复用程序产生AE_READABLE事件发送至事件队列
  • 连接应答处理器接收到事件,开始创建socket并将AE_READABLE事件与命令请求处理器关联,连接建立成功,等待接收客户端后续操作
  • 服务器接收到客户端发送的命令请求
  • 多路复用程序产生AE_READABLE事件,发送至事件队列
  • 命令请求处理器接收到事件,并从socket中读取出命令信息并开始执行命令,同时将socket的AE_WRITABLE事件与命令回复处理器关联
  • 多路复用程序产生AE_WRITABLE事件,并发送至事件队列
  • 命令回复处理器接收到事件,开始向socket输出本地操作的执行结果给客户端,将socket的AE_WRITABLE事件与命令回复处理器解除关联
时间事件

Redis的时间事件分为两种,定时事件:让一个函数在指定的时间之后执行一次;周期性任务:让一个函数每间隔指定时间执行一次;时间事件是基于serverCron函数实现,该函数主要对服务器自身资源和状态检查和调整,确保服务器的长期、稳定运行,具体工作详见本文中事件的调度执行。

事件的调度执行

redis详细图解,redis面试必问的三大问题(4)

事件的调度执行过程

  • apiPoll函数阻塞并等待文件事件产生,该方法避免了服务器对时间事件进行频繁的轮询,该函数有阻塞过期,时间到达立即返回
  • 文件事件的到达是随机的,随着文件事件的执行,时间事件的到达时间开始接近,当时间事件执行时间到达后服务器开始执行时间事件
  • 文件事件与时间事件都是同步、有序、原子的执行的,整个过程尽量减少阻塞时间,耗时相对久的函数都会设置run_with_period(最大运行时长),当执行耗时比较久的函数时,Redis会采用子线程或子进程的方式来异步处理,比如持久化操作。
  • Redis 6.0对processEvents流程进行了优化,引入多线程模型提升eventLoop 处理效率,详见:Redis多线程处理模型

以上就是Redis事件实现机制的介绍,如果各位还想了解更多,欢迎转发评论 关注,Redis图解系列专栏持续更新中。

栏目热文

redis从零开始教程(redis新手入门知识)

redis从零开始教程(redis新手入门知识)

前言自己在搭建redis服务的时候碰到一些问题,好多人只告诉你怎么成功搭建,但是并没有整理过程中遇到的问题,所有楼主就花...

2022-10-31 23:17:49查看全文 >>

redis的正确使用方法(redis的常见使用场景)

redis的正确使用方法(redis的常见使用场景)

redis使用规范建议key命名规范把业务名作为前缀, 然后用冒号分隔,再加上具体的业务数据名比如,存储页面1991的u...

2022-10-31 22:40:31查看全文 >>

redis菜鸟教程学习笔记(redis入门教程超详细)

redis菜鸟教程学习笔记(redis入门教程超详细)

一、Redis为什么那么快QPS达到10万/秒用C语言实现基于内存单线程,不用线程上下文切换及加锁二、redis数据类型...

2022-10-31 23:08:58查看全文 >>

redis入门教程超详细(redis详细图解)

redis入门教程超详细(redis详细图解)

【redis是什么】redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数...

2022-10-31 23:27:04查看全文 >>

redis入门教程免费(redis 菜鸟教程)

redis入门教程免费(redis 菜鸟教程)

常用的 SQL 数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的 IO 压力。图片来自 Pe...

2022-10-31 23:04:26查看全文 >>

redis 模糊查询(redis集群模糊查询所有数据)

redis 模糊查询(redis集群模糊查询所有数据)

【51CTO.com原创稿件】Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我...

2022-10-31 23:19:27查看全文 >>

redis菜鸟教程(redis入门教程超详细)

redis菜鸟教程(redis入门教程超详细)

实战:20200520验证OK1、宿主机霞新建目录#mkdir -p /opt/redis#mkdir -p /opt/...

2022-10-31 22:55:21查看全文 >>

redis基础知识图解(redis入门手把手学习笔记超详细)

redis基础知识图解(redis入门手把手学习笔记超详细)

什么是哨兵?哨兵(Sentinel)是 Redis 的高可用性解决方案,前面我们讲的主从复制它是高可用的基础,但是单纯的...

2022-10-31 22:52:22查看全文 >>

redis超详细教程(redis详细图解)

redis超详细教程(redis详细图解)

在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没...

2022-10-31 22:43:17查看全文 >>

redis教程入门到实战(redis新手入门到精通)

redis教程入门到实战(redis新手入门到精通)

阅读本文大约需要 16 分钟。大家好,这里是 Java后端。这篇文章我想和你聊一聊 Redis 的最佳实践。你的项目或许...

2022-10-31 23:26:33查看全文 >>

文档排行