IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> redis的事件驱动模型的数据结构 -> 正文阅读

[数据结构与算法]redis的事件驱动模型的数据结构

   Redis的IO模型是Reactor模式,是利用 I/O 多路复用技术,一般多路复用的工作基本就是监听和通知。监听感兴趣的 I/O 事件(读事件,写事件),维护一个以文件描述符为主键,数据为某个预设函数的事件表,这里其实就是一个数组或者链表。当事件触发时,比如某个文件描述符可读,系统会返回文件描述符值,用这个值在事件表中找到相应的数据项(包括回调函数等),从而实现回调。同样的,定时事件也是可以实现的,因为系统提供的 I/O 多路复用技术中的函数允许我们设置等待超时的时间,预设定时间内没有事件发生时,会返回。

那么,Redis为了完成这个事件驱动过程设计了四种数据结构,是我们要在完成源码的掌握的,也是咱们在阅读核心方法中变量和传参的。所以先来了解一下。

Redis 事件驱动模型有四个主要的数据结构:aeFileEvent文件事件,aeTimeEvent时间事件,aeFiredEvent事件触发,aeEventLoop事件循环

在这里插入图片描述

1、aeFileEvent-文件事件

// 文件事件结构体
/* File event structure */
typedef struct aeFileEvent {
    int mask; /* one of AE_(READABLE|WRITABLE) */
    // 回调函数指针
    aeFileProc *rfileProc;
    aeFileProc *wfileProc;
    // clientData 参数一般是指向redisClient 的指针
    void *clientData;
} aeFileEvent;

2、aeTimeEvent-时间事件

// 时间事件结构体
/* Time event structure */
typedef struct aeTimeEvent {
    long long id; /* time event identifier. */
    long when_sec; /* seconds */
    long when_ms; /* milliseconds */
    // 定时回调函数指针
    aeTimeProc *timeProc;
    // 定时事件清理函数,当删除定时事件的时候会被调用
    aeEventFinalizerProc *finalizerProc;
    // clientData 参数一般是指向redisClient 的指针
    void *clientData;
    // 定时事件表采用链表来维护
    struct aeTimeEvent *next;
} aeTimeEvent;

3、aeFiredEvent-触发事件

// 触发事件
/* A fired event */
typedef struct aeFiredEvent {
    int fd;
    int mask;
} aeFiredEvent;

4、aeEventLoop-循环事件

// 事件循环结构体
/* State of an event based program */
typedef struct aeEventLoop {
    int maxfd; /* highest file descriptor currently registered */
    int setsize; /* max number of file descriptors tracked */
    // 记录最大的定时事件id + 1
    long long timeEventNextId;
    // 用于系统时间的矫正
    time_t lastTime; /* Used to detect system clock skew */
    // I/O 事件表
    aeFileEvent *events; /* Registered events */
    // 被触发的事件
    aeFiredEvent *fired; /* Fired events */
    // 定时事件表
    aeTimeEvent *timeEventHead;
    // 事件循环结束标识
    int stop;
    // 对于不同的I/O 多路复用技术,有不同的数据,详见各自实现
    void *apidata; /* This is used for polling API specific data */
    // 新的循环前需要执行的操作
    aeBeforeSleepProc *beforesleep;
} aeEventLoop;
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:44:21  更:2022-01-17 11:45:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/26 13:18:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码