redis1.2.6 事件处理

Redis源码剖析和注释(十九)--- Redis 事件处理实现 Redis 事件处理实现1. Redis事件介绍Redis服务器是一个事件驱动程序。下面先来简单介绍什么是事件驱动。所谓事件驱动,就是当你输入一条命令并且按下回车,然后消息被组装成Redis协议的格式发送给Redis服务器,这就会产生一个事件,Redis服务器会接收该命令,处理该命令和发送回复,而当你没有与服务器进行交互时,那么服务器就会处于阻塞等待状态,会让出CPU从而进入睡眠状态,当事件触发时, 阅读详情

​ redis的事件分为两种事件:一个是文件事件,Redis基于Reactor模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器;另一个是时间事件,顾名思义,定时运行的事件和周期运行的事件。

​ 在aeMain函数中调用了aeProcessEvents函数,它管理着所有事件的分发和调用。

1

​ aeApiPoll函数阻塞并等待所有被aeCreateFileEvent函数设置为监听状态的套接字产生文件事件,当有至少一个事件产生,或者等待超时后,函数返回。

事件概况

  1. initServer函数创建事件循环 server.el = aeCreateEventLoop();//创建事件循环
  2. initServer创建时间时间 aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL);//注册时间事件 serverCron回收一些垃圾 1毫秒后server.el事件到达,使用serverCron处理此事件
  3. main函数中创建服务器的最重要的文件事件,监听server.fd,当出现AE_READABLE类型事件采用acceptHandler函数处理事件 if (aeCreateFileEvent(server.el, server.fd, AE_READABLE,acceptHandler, NULL) == AE_ERR) oom("creating file event");//给服务器与接收句柄关联
  4. aeMain开启事件循环
    主要事件的调度与处理都是在aeProcessEvents函数中进行,其中aeApiPoll堵塞,等待事件,之后处理已经到达的文件事件,再处理时间事件
redis源码阅读1--事件处理实现--ae.c 头节点是遍历的起始点,但不一定是触发时间最早的事件。链表不按时间排序是为了插入事件时更高效,避免频繁的重新排序操作。通过线性遍历找到最早的事件,在大多数场景下已经足够高效,而且符合 Redis 的设计哲学:简洁、高性能。函数指针是一种可以保存函数地址的指针,允许动态调用不同的函数。在你的代码中,定义了一种函数类型,而用来设置为某个特定的函数。aeMain中通过函数指针调用这个函数,实现了在事件处理前执行自定义逻辑的功能。希望这个解释能帮助你更好地理解函数指针的工作原理! 阅读详情

相关推荐

Redis的事件处理机制分析

Redis事件驱动机制分析

qq_35267557的博客 484

Redis-事件机制

​众所周知Redis采用事件驱动机制来处理大量的网络IO,它采用的是自己实现一个非常简洁的事件驱动库 ae_event。而Redis中的事件驱动库只关注网络IO,以及定时器。​ Redis是基于线程模型,由于Redis的性能在于IO不是CPU,所以在6.0引入IO多路复用。但是Redis本身的事件库是自己实现的,所以IO多路复用的设计,主要用于多一些线程进行同步读或者同步写,而不会进行同步的读写。它的工作线程始终都是一个,只是处理的现场不在是单个线程来处理。

qq_36010886的博客 417

Windows系统下Redis 6.0.1完整安装与配置指南

Redis是一个开源的、高性能的键值存储数据库,由Salvatore Sanfilippo创建。由于其出色的数据结构支持,Redis既可以作为数据缓存,也可以作为消息代理,甚至是数据库系统。Redis支持多种数据类型,如字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、散列(hashes)、位图(bitmaps)、超日志(hyperloglogs)、地理空间索引(geospatial indexes)和流(streams)。

weixin_42583683的博客 1156

Redis

【Redis】持续更新...

w_k_x110的博客 1389

Redis-6.2.7 Windows 版本安装与使用全攻略

本文还有配套的精品资源,点击获取 简介:Redis是一个开源的、基于内存的高性能键值对数据库,适合用于缓存、消息队列等场景。Redis-6.2.7 Windows 版本是专为Windows系统优化的发行版。本文详细介绍了Redis 6.2.7的特性和如何在Windows上进行安装、配置及运行。内容包括新版本特性、兼容性调整、安装指南、配置文件定制、客户端连接方法、支持的数据...

weixin_36073714的博客 2331

StackExchange.Redis-1.2.6精简,附64位dll

C#下非常好用的开源Redis客户端工具,包括内存数据库和pub/sub功能等。 精简工程目录后只包括StackExchange.Redis。代码未做更改。 64位dll在bin目录下。

redis线程模型

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

空杯心态_虚怀若谷 1242

Basler相机和pylon viewer 的使用

文章目录1 线路连接2 安装和使用pylon 1 线路连接 电源线接到电源插座,网线接到电脑(电脑没有网口的话,可用转换器转到type-c接口)。 2 安装和使用pylon 参考 Basler pylon安装及对网口相机基本设置 相机和电脑以太网IP设置参考:balser相机IP设置 关于相机参数和pylon viewer的详细设置,可以参考pylon Viewer安装路径下的文档(Documentation) ...

Deephome的博客 1万+

redis的事件机制

Redis的事件驱动程序

二缺和傻宝宝的博客 784

CAN基础知识

CAN基础知识

shouchen1的博客 9144

R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)

本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。

weixin_29054399的博客 187

深入理解 Redis 的文件事件处理器

Redis 的文件事件处理器是其高性能网络通信的核心。通过单线程的事件驱动模型,Redis 能够有效地处理大量的并发连接和请求,同时保持了代码的简洁性和可维护性。

码上一元 1559

倍加福(P+F)R2000修改雷达IP

在调试车子的时候,用到了倍加福R2000的一款雷达,设备启动建图时发现建不了图,于是查看/scan发现话题无数据,尝试ping雷达接口发现ping不通,应该是IP地址与上位机端口的IP地址不对。首先查看雷达的IP地址,这个在雷达上有两个按键,按下后可以显示IP: 按两下右边的键再按一下左边的键雷达上会显示出IP号,这里拍的不是很清楚。查看到开始时雷达IP地址为192.168.111.10,而上位机ping的IP地址为192.168.188.50.与实际不同,所以需要对雷达进行配置。一台windows笔记本

YiYeZhiNian的博客 5890

Laravel + Redis 实现异步事件处理与 Redis 队列最佳实践

Laravel + Redis 异步事件处理方案 本文详细介绍了使用 Laravel 和 Redis 实现高效异步事件处理的方案。主要内容包括: 环境配置:安装 Redis 服务,配置 Laravel 项目以使用 Redis 队列驱动 实现步骤: 创建事件类和异步监听器 注册事件与监听器关系 使用事件触发异步任务 队列管理: 使用 Supervisor 管理队列工作进程 队列任务监控和失败处理机制 高级配置如优先级队列和任务超时设置 最佳实践: 合理的队列命名策略 任务重试与失败处理机制 性能优化建议 相比

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2213

YOLOv11改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv11的模型配置文件在中,里面包含以及,本文以目标检测模型文件为例(其他文件完全一致),详细介绍一下YOLOv11模型文件中各参数的含义。

Limiiiing的博客 5309

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1662

Redis事件处理机制详解

Redis 服务器的事件主要处理两方面: 处理文件事件:在多个客户端中实现多路复用,接受它们发来的命令请求,并将命令的执行结果返回给客户端 时间事件:实现服务器常规操作 1 文件事件 Redis server通过在多个客户端间多路复用, 实现了高效的命令请求处理: 多个客户端通过socket连接到 Redis server, 但只有在socket可无阻塞读/写时, server才会和这些客户端交互。 Redis 将这类因为对socket进行多路复用而产生的事件称为文件事件, 文件事件可分类如下: 1.1

JavaEdge全是干货的技术号 5093

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1303

Redis 6.2 源码导读

Redis 是一个高性能的开源内存键值数据库,广泛用于缓存、会话管理和实时分析。Redis 6.2 版本引入了一些新特性和改进。

大道至简 855

【Matlab】matlab代码实现sph溃坝模拟

本文介绍了一个基于MATLAB的SPH溃坝模拟实现。代码使用平滑粒子流体动力学方法,通过建立1000个随机分布的粒子,计算粒子间的相互作用力来模拟流体运动。模拟过程包括初始化参数、粒子创建、密度压力更新、速度位置计算以及可视化展示。核心算法采用poly6Kernel和spikyKernelGradient函数处理粒子间作用力。该示例为二维简化模型,仅包含基本物理参数和计算流程,实际应用需进一步优化扩展。

unber的博客 206

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Redis通信协议及事件处理机制

前言   本文是redis章节进行复习,本文中所有内容都来自于拉勾教育高薪训练营 本章学习目标: 知道Redis的请求响应模式 理解请求数据格式(RESP) 描述命令处理流程 知道Redis的响应格式 掌握4种IO多路复用模式(epoll) 理解aeEventLoop 1 通信协议   Redis是单进程单线程的。   应用系统和Redis通过Redis协议(RESP)进行交互 1.1 请求相应模式   Redis协议位于TCP层之上,即客户端和Redis实例保持双工的连接。 1.1.1 串行的请求响

qq_20029829的博客 760

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Redis通信协议与事件处理

一,Redis通信协议 Redis是单进程单线程的。 应用系统和Redis通过Redis协议(RESP)进行交互。Redis协议位于TCP层之上,即客户端和Redis实例保持双工的连接。 串行的请求响应模式 串行化是最简单模式,客户端与服务器端建立长连接 连接通过心跳机制检测(ping-pong) ack应答 客户端发送请求,服务端响应,客户端收到响应后,再发起第二个请求,服务器端再响应。这种模式下,消耗在网络协议的连接上,有问有答,性能很低。 双工的请求响应模式 该模式下批量请求,平凉反应.

FYHannnnnn的博客 723

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Redis服务端事件处理流程分析

Redis 为什么运行得比较快?原因之一就是它的服务端处理程序用了事件驱动的处理方式。那什么叫事件处理?就是把处理程序当成一个一个的事件处理。服务端高性能网络IO编程模型简析(https://www.cnblogs.com/jiujuan/p/16586900.html)中高性能 IO 模型中,就提到过这个事件处理。服务端网络开发中,IO 的处理过程,可以把一个完整 IO 处理过程分解为一个一个小的任务,可以把这个小的任务叫做事件,处理每个小任务也叫作事件处理。

九卷技术录 729

【分布式利器:Redis】1、Redis面试核心:线程模型深度解析(6.0前后变化+工作流程)

Redis线程模型详解:从单线程到混合多线程的演进 本文深入解析Redis线程模型的核心原理与演进过程。在Redis 6.0之前采用单线程模型,通过I/O多路复用技术实现高并发处理,保证命令执行的原子性。6.0版本引入混合多线程模型,将网络I/O操作交由多线程处理,而命令执行仍保持单线程,有效解决了高并发场景下的网络瓶颈问题。文章详细拆解了两种模型的工作流程、核心组件及性能优化原理,并针对面试常见问题提供标准解答,帮助读者全面掌握Redis线程模型这一重要知识点。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1056

Redis源码分析2:Redis的事件处理模型

点击上方“黑光技术”关注之完美之道,不在无可增加,而在无可删减!前言上一篇分析了一下redis的大致框架和启动过程,这篇我想分析一下redis的事件处理模型,当然也包含了网络事件的处理模...

黑光技术 184

redis — 基于Spring Boot实现Redis stream实时流事件处理

1、redis stream简介 Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。 简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。 Redis5.0中发布的Stream类型,也用来实现典型的消息队列。提供

qq_38658567的博客 6828
上一篇: redis1.2.6 redis-cli.c
下一篇: 两数异或交换
H7apply
博客等级 码龄7年 3粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值