《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
分享到:
相关推荐
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详解,Java源码
博文链接:https://luliangy.iteye.com/blog/1830507
redis-2.0.4源代码 ...Redis 源码日志学习日志 全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想
文件包含ajax、json和Redis学习笔记和练习源码。 配套博客:https://blog.csdn.net/H200102/article/details/107170707
SpringBoot学习笔记所有源码集,包括 集成了freemarker、Servlet、拦截器、拦截器、Filter、静态资源处理、启动加载数据、Springboot 日志、JDBC使用、Springboot JPA、Mybatis、动态数据源、集成swagger、集成Redis...
redis安装包 1.NOSQL数据库入门 ...6.Redis学习笔记 7.redis项目实战 8.Redis 多机特性工作原理简介 9.redis深入研究及大集群实战经验 10.Redis 的安装配置介绍 12.Redis 的安装配置 等等 helloredis 例子源码
我在之前阅读源码的同时也发现了很多变化的地方,在此把已经发现的列举出来,不过肯定是不全的,因为我还没读完(逃跑~)。等再发现新的值得一聊的,并且能凑够一篇文章的内容的话,我会再继续写一篇的。
2021秋招学习笔记总结,包含Java基础、Java并发、数据库、redis等常用后端技术等内容。数据类型 注:包装类型中一般设有缓冲池,比如Integer、String。 1、Integer缓存池范围-128~127都是同一个地址,在缓存池范围...
redis阅读理解,带详细注释 说明 本份代码从 clone下来,然后自己添加自己的理解,再次基础上增加函数调用流程注释。 疑问: 1,redis选主结束后,是否添加新主节点数据恢复流程(新主例程数据并非所有从例程中数据...
【毕业设计】基于springboot的仿共享单车后台源码及笔记【源码+SQL脚本】.zip 一个基于springboot的类似于共享单车的后台系统,包括手机号码注册、登陆、定位、骑行轨迹和消息推送等功能 技术栈: SpringBoot ...
希望这份注释原文能给大家学习和了解Redis带来一点帮助。 另外,正在各大网店发售中,希望大家可以多多支持这本书。 玩得开心! 黄健宏(huangz) 2014年6月28日 附录:各个原始文件的作用简介 文件 作用 adlist.c...
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。 特征: 1、数据间没有必然的关联关系 2、内部采用单线程机制进行工作 3、高性能。 4、多数据类型支持: ...
包含spring,mybaits,JUC包及其源码的分析,还有基本知识。mq,redis,zookeeper
本资源是经过本地编译测试、可打开、可运行的项目、文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但还需强调一下,这些项目...
leetcode题库 learn coding from sample... 整理的一些小程序demo,记录了之前的的学习笔记吧。代码大多用C写成的,也有leetcode相关的Go ...学习redis源码时候仿照其网络库写的一个epoll库 以及一些代码片段 ...
该平台旨在为学生提供一个方便、高效的读书笔记共享环境,帮助他们更好地学习和掌握知识。通过这个平台,学生可以上传、下载、查看和评论读书笔记,实现知识的共享和传播。主要功能如下:用户注册与登录:用户可以...
in-action:Java工程师之Redis实战系列教程,同其他教程一样,均是在下学习笔记,本系列主要参考自《 Redis-in-action》,将书本中的有趣的例子转换为能解决特定问题的示例程序,所有的核心章节均提供示例源码在...
本站目的是记录技术学习笔记,分享技术学习笔记、技术文章、优秀资源。 若您认为侵犯你的个人知识产权,请联系邮箱(),我会第一时间和您进行沟通处理。 若你喜欢本站内容,欢迎转载,但请注明出处,且勿用于
笔者也收到了大量的反馈和建议,笔记仍然会在我的学习旅程中不断更新,绝对不鸽。 很多章节仍然在完善中,如Go在微服务中的实践、框架的具体分析、Go的源码分析等等,后续会完善剩余章节,并分享实践经验,敬请期待...