《Redis源码学习笔记》文章列表
Redis没有使用第三方事件库来处理socket(譬如Libevent),而是自己实现了一个非常精巧的事件库(加上注释不到600行代码),这使得我们可以更加专注于Redis本身代码的阅读,而不必陷于三方库的学习和使用(我自己就是因为该原因选择学习Redis而不是memcache);同时阅读Redis自带的事件库也可以让我们一窥类似Libevent这样的事件库内部实现机制;
Redis事件库中的所有函数几乎都是以ae开头(原因不得而知),其中最重要的就是aeEventLoop对象,它充当着“事件处理器”角色:
其中“文件事件”是一个数组,存放当前Redis所有连接的客户端描述符,而“时间事件”则是一个链表,用来存放计划任务;
事件处理器循环流程(
由于图片较大,缩放较为模糊,请双击打开查看原图):
整个执行流程的伪代码:
def aeMain(aeEventLoop):
# 开始事件循环
while (not aeEventLoop.stop):
aeProcessEvents(aeEventLoop, AE_ALL_EVENTS)
def aeProcessEvents(aeEventLoop, flags):
# 是否需要处理时间事件
if flags & AE_TIME_EVENTS:
# 获取最近一个即将到达的时间事件
arrived_time = aeEventLoop.timeEvents.getNearestArrivedTime()
if (arrived_time < now_time):
# 若最近一个时间事件的arrived_time小于当前时间(说明需要立即执行),则设置文件事件为非阻塞
tvp.sec = 0
tvp.usec = 0
else:
# 否则取两者的时间间隔,作为文件事件的最大阻塞时间
tvp.sec = arrived_time.sec - now_time.sec
tvp.usec = arrived_time.usec - now_time.usec
else
# 文件事件是否阻塞
if flags & AE_DONT_WAIT:
tvp.sec = 0
tvp.usec = 0
else :
tvp = null
# 处理文件事件(IO多路复用)
# 若此时没有描述符就绪,tvp的值决定阻塞行为(立即返回?阻塞一段时间?一直阻塞下去?)
aeEventLoop.fileEvents.poll(tvp)
# 处理达到的时间事件
if (flags & AE_TIME_EVENTS):
aeEventLoop.timeEvents.processArrived()
更详细细节,请看:ae.h ae.c
总结:
1. 了解文件事件和时间事件的概念;
2. 了解Redis事件库运行流程;
- 大小: 9.3 KB
- 大小: 29.3 KB
分享到:
相关推荐
Redis 安装简单,可以通过源码编译或使用包管理器安装。启动Redis有前台和后台两种方式,后台启动更常见。Redis 可通过`redis-cli`命令行工具进行交互,提供一系列命令用于操作数据库。 2. Redis 数据类型: - **...
在Redis源码阅读笔记(10)——事件中,我们将探讨Redis如何利用事件模型来实现非阻塞I/O,以及相关的编程模型如Reactor模式和NIO。 Redis使用了一个基于epoll的事件处理器,epoll是Linux系统提供的一种高效I/O多路...
在“狂神redis源码笔记”中,我们可以期待学习到Redis的源码分析、内部机制以及如何通过Java进行高效操作。源码分析是深入理解Redis工作原理的关键,有助于开发者优化使用方式或进行定制化开发。 Redis的核心知识点...
Redis客户端支持多种主流编程语言的客户端库,这意味着用户可以从不同的编程语言中访问和操作Redis数据库。 Redis还提供了一些高级特性,例如脚本功能,用户可以使用Redis内置的脚本语言Lua来编写脚本,以实现更...
Redis是一个开源的、基于内存的数据...总的来说,Redis入门学习笔记详细介绍了Redis的特性、安装、数据类型、使用场景、备份与恢复、性能测试、Python客户端使用等基础知识和技巧,非常适合新手作为入门学习的资料。
Redis学习笔记 Redis是一个开源的基于键值对(Key-Value)NoSQL数据库,使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀,并提供多种语言的API。Redis可以被称为KV数据库,键值对数据库,内部存储...
### Redis 学习笔记知识点概览 #### 一、Redis 简介及特性 - **Redis**(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,它支持多种数据结构,如字符串(strings)、散列(hashes)、列表...
1.下载源码,编译安装 3 2.修改配置 4 3.启动 5 三.Redis常用的命令 6 四.Redis 在客户端程序中的使用 11 1.Java客户端jar包 11 2.测试程序: 11 3.Spring中的配置 13 4.pipeline 14 五.测试服务器 16 六.密码...
本学习笔记将基于提供的压缩包文件,深入探讨Redis的关键特性、工作原理以及常见应用场景。 首先,"深入redis学习(一)--readme and conf.doc"介绍了Redis的安装和配置过程。在配置文件中,我们可以设置服务器的...
Redis 的环境搭建相对简单,可以从官方网站或源码仓库下载最新稳定版本的源码包,例如 Redis 2.0.4。解压后通过 `make` 命令编译,编译完成后会有 `redis-server` 和 `redis-cli` 两个可执行文件。直接运行 `./redis...
首先,从官方下载地址获取最新稳定版的 Redis 源码包,如 `redis-2.0.4.tar.gz`。解压后,进入目录并执行 `make` 命令进行编译。编译完成后,有两个主要的可执行文件:`redis-server`(服务端)和 `redis-cli`...
### Redis介绍 Redis是一种开源的键值存储系统,属于NoSQL数据库的一种,它与Memcached相似,但提供了数据持久化的能力。...这些内容覆盖了Redis学习笔记的主要知识点,有助于理解Redis的核心技术和应用场景。
### Redis学习笔记整理 #### 一、Redis环境搭建 ##### 1.1 简介 Redis是一款开源的键值(Key-Value)型数据库系统,因其高性能和丰富的数据结构而广受欢迎。它不仅可以作为数据库使用,还可以作为一种数据结构服务器...
首先,从官方网站下载最新稳定版的Redis源码或二进制包。在Linux环境下,可以使用编译源码的方式进行安装,涉及到`make`和`make install`等命令。对于Windows用户,可直接下载预编译的二进制包,解压后配置环境变量...
这份2022年的Redis学习笔记涵盖了Redis的基础概念、核心特性、使用场景以及最佳实践。 一、Redis简介 Redis是一个开源(BSD许可)的,非关系型、内存中的数据结构存储系统,可以用作数据库、缓存和消息中间件。它...
Redis是一款高性能的键值对数据库,它以内存存储为主,数据持久...通过阅读本学习笔记和源码分析,你可以深入了解Redis的工作原理,掌握如何在实际项目中高效地使用Redis。不断实践和探索,你将成为Redis的熟练驾驭者。