redis设计与实现读书笔记——事件

《Redis设计与实现》读书笔记-客户端 Redis 服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用由1/0多路复用技术实现的文件事件处理器,Redis 服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/ 阅读详情

文件事件:redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。服务器和客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作

时间事件:redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象

 

  1. 文件事件的处理器
    1. 连接应答处理器:用于对连接服务器监听套接字的客户端进行应答。当Redis服务器进行初始化的时候,程序会将这个连接应答处理器和服务器监听套接字的AE_READABLE事件关联起来,当有客户端用connect函数连接服务器监听套接字的时候,套接字就会产生AE_READABLE事件,引发连接应答处理器执行,并执行相应的套接字应答处理
    2. 命令请求处理器:负责从套接字中读入客户端发送的命令请求内容
    3. 命令回复处理器:负责将服务器执行命令后得到的命令回复通过套接字返回给客户端。
  2. 时间事件
    1. 定时事件:让一段程序在指定的时间之后执行
    2. 周期性事件:让一段程序每隔指定时间就执行一次

一个时间事件主要由三个属性组成:

ID:服务器为时间时间创建的全局唯一ID,ID号按从小到大的顺序递增,新事件的ID号比旧事件的ID号要大。

when:毫秒精度的UNIX时间戳,记录了时间事件的到达时间

timeProc:时间事件处理器,一个函数。当时间事件到达时,服务器就会调用相应的处理器来处理事件。

实现:维护一个链表,链表中每个节点代表存储一个时间事件。processTimeEvents是时间函数的执行器,其内部逻辑是遍历链表中的每一个节点,如果事件已到达则执行事件处理器,并获取返回值。根据返回值判断是定时事件还是周期性事件:如果是定时事件,则删除;如果是周期性事件,更新when值。

     3. 事件的调度与执行:如果同时存在两种事件类型,需要进行调度,由aeProcessEvents函数负责,具体过程如下:

  1. 获取离当前时间最近的事件事件的when值,计算time = now – when
  2. time = time < 0 ? 0 : time;
  3. 设置阻塞等待文件事件的阻塞时间
  4. 超时阻塞等待并处理已产生的文件事件
  5. 直到time = 0,处理已产生的时间事件
《Redis设计和实现 黄建宏著》配套 Redis 3.0 中文注释版源码 与《Redis设计和实现 》黄建宏著配套的, Redis 3.0 中文注释版源码。 立即下载

相关推荐

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 264

Redis设计与实现—事件机制

前言 Redis 内部消息通信机制学习和了解 文章目录前言一、Redis中事件的分类文件事件文件事件处理器I/O 多路复用程序的实现文件事件处理器时间事件时间事件怎么处理关键的时间事件函数 —— serverCron事件调度 —— aeProcessEvents 一、Redis中事件的分类 Redis是一个事件驱动程序,服务器需要处理以下两种事件: 文件事件:Redis服务器通过套接字与客户端进行连接,文件事件就是对套接字操作的抽象。服务器和客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些

爱学习i的博客 535

STM32驱动LED矩阵:IS31FL3731与查理复用技术实践

LED矩阵显示是嵌入式系统中常见的人机交互方式,其核心在于高效的驱动技术。查理复用(Charlieplexing)作为一种创新的矩阵扫描方式,通过引脚复用技术,用N个引脚驱动N²-N个LED,大幅提升了硬件资源利用率。IS31FL3731驱动芯片集成了这一技术,配合STM32F410RB微控制器的强大性能,可实现144个LED的精准控制。这种组合在艺术装置、信息展示等场景中展现出独特优势,既能呈现丰富的视觉效果,又能通过内置PWM调光实现256级亮度控制。通过I2C接口通信,开发者可以轻松实现字符显示、图像

weixin_29193359的博客 279

Redis设计与实现(黄健宏)pdf

下载地址:网盘下载 内容简介 编辑 本书[1]主要分为四大部分。第一部分“数据结构与对象”介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对Redis实现单机数据库的方法进行了介绍,包括数据库、RDB持久化、AOF持久化、事件等。第三部分“多机数据库的实现”对Redis的Sen...

weixin_30724853的博客 2594

Ubuntu开机卡在BusyBox?3种方法快速修复initramfs错误(附详细命令)

本文详细介绍了Ubuntu开机卡在BusyBox并出现initramfs错误的3种修复方法,包括使用fsck检查文件系统、调整BIOS/UEFI存储设置以及修改GRUB内核参数。针对常见的文件系统错误和根设备无法找到问题,提供了具体的命令行操作步骤和实用技巧,帮助用户快速恢复系统启动。

milk8的博客 785

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1949

redis线程模型

0. 前言 Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler): 文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好执行连接应答(...

weixin_30721899的博客 155

基于深度学习的活体人脸检测系统:YOLOv5、YOLOv6、YOLOv7、YOLOv8实现与UI界面设计

本博客详细介绍了如何基于YOLOv5、YOLOv6、YOLOv7、YOLOv8模型实现一个完整的活体人脸检测系统。系统包括数据集准备、模型训练、UI界面设计以及实时检测功能的实现。通过YOLO系列模型的应用,我们能够高效、准确地进行人脸检测和活体验证。未来,随着YOLOv9和其他新一代目标检测模型的出现,我们可以进一步提高检测精度和速度。此外,集成更多的传感器数据(如深度传感器、红外线传感器)可以使活体检测系统更加安全和稳定。

YOLO 541

探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程

Redis 中的事件驱动模型2018-03-22原文地址:https://www.xilidou.com/2018/03/22/redis-event/Redis 是一个事件驱动的内存数据库,服务器需要处理两种类型的事件。文件事件时间事件下面就会介绍这两种事件的实现原理。文件事件Redis 服务器通过 socket 实现与客户端(或其他redis服务器)的交互,文件事件就是服务器对 socket ...

Java技术江湖 1434

【C语言】字符常量详解

字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。

LuckiBit 5019

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

redis设计与实现读书笔记-事件

事件 Redis服务器是一个事件驱动程序, ❑文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。 ❑时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 文件事件 Redis基于R

只作为个人备忘录 310

CAD二次开发c# .net加载cui\cuix菜单文件

public static void LoadMyCui(string cuiFile) { Document doc = Application.DocumentManager.MdiActiveDocument; object oldCmdEcho = Application.GetSystemVariable("CMDECHO"); object oldFileDia = Application.GetSys..

2127

Redis设计与实现读书笔记---事件/客户端/服务器

事件 Redis服务器是一个事件驱动程序,主要处理文件事件和事件事件。 文件事件 Redis基于Reactor模式开发网络事件处理器,即文件事件处理器。 文件事件处理器主要由四个部分组成,套接字,I/O多路复用程序,文件事件分派器,事件处理器。处理流程如下: 服务器与客户端通过套接字(Socket)进行通信,当套接字准备好执行连接应答、写入、读取、关闭等操作的时候,就会产生文件事件; I/O多路复用程序负责监听多个套接字,并将套接字产生的事件塞入一个队列中,然后文件事件分派器将事件分派给对应的事件处理器。

生蛋的公鸡的博客 227

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《Redis设计与实现》读书笔记-第二部分:单机数据库的实现-3:事件

Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件:Redis服务器通过套接字与客户端(或者其他redis服务器)连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通新会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。 时间事件:redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 目录 1、文件事件 1.1文件事件处理器的构成 1.2I.

PnJgHT的博客 861

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

《Redis设计与实现》读书笔记——数据库、持久化、事件、客户端、服务器

1、数据库 struct redisServer{ // 一个数组,保存服务器中所有数据库 redisDb *db; // 服务器的数据库数量,默认16 int dbnum; }; typedef struct redisClient{ /** 记录客户端正在使用的数据库 * 指向redisServer.db数组的...

weixin_39420024的博客 221

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

实现动态表头_《Redis设计与实现》读书笔记

《Redis设计与实现》读书笔记​www.woojean.com关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外,还需要对合并的结果执行去重复(distinct)操作,最终导致交集操作的实现变得异常复杂。《Redis设计与实现》读书笔记关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外...

weixin_35339622的博客 243

Redis设计与实现读书笔记

Redis、读书笔记、Redis源码分析、Redis原理分析

一个有信仰的技术人 1338

《redis设计与实现》 读书笔记

读书笔记 一、前言 什么是redis: Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。简而言之redis就是放在远程网络上的一个key-value数据结构。 redis的使用场景: Redis可以用来做cache,也可以用来做持久化db,甚至用来做队列。队列就是存储临时性数据,而cache主要存储那些用...

kangbin825的专栏 2746

《Redis 设计与实现》读书概要

《Redis 设计与实现》读书笔记

u011447403的专栏 1498

《Redis读书笔记》 事件设计

事件 文件事件 Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其它服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列的网络通信操作 文件事件处理器 文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字,并根据套接字目前执行的任务来为套接...

wuhulala的休息室 480

《Redis设计与实现》读书笔记

文章目录1. 基本对象2. 底层数据结构3. 对象3.1. 字符串对象3.1.1. int3.1.2. embstr3.1.3. raw3.2. 列表对象3.3. 哈希对象3.4. 集合对象3.5. 有序集合对象3.6. 对象共享4. SDS (simple dynamic string)5. linkedlist6. hashtable7. intset7.1. 升级8. 压缩列表(ziplis...

艰苦奋斗 895

redis设计与实现 pdf_《Redis设计与实现》读书笔记

《Redis设计与实现》读书笔记​www.woojean.com关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外,还需要对合并的结果执行去重复(distinct)操作,最终导致交集操作的实现变得异常复杂。《Redis设计与实现》读书笔记关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外...

weixin_39939276的博客 356

Redis设计与实现——读书笔记

数据结构与对象 SDS(Simple Dynamic String) struct sdshdr { int len;//已使用字节数 int free;//未使用字节数 char buf[];//字节数组 } 特点: 1、空间预分配策略,减少内存重分配次数(内存分配涉及系统调用)。 2、获取长度O(1),通过属性记录字符串长度。 3、杜绝缓冲区一次,通过API对SDS进行修改时,会先检查...

void 395
上一篇: java中的并发工具类
下一篇: redis设计与实现读书笔记——复制
CCCCC_SSSSS
博客等级 码龄10年 3粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值