Redis 事件循环器(AE)实现剖析

2019-11-20 11:33:21 +08:00
 cyhone

Redis 作为一个单线程高性能的内存缓存 Server 而被人熟知。作为一个典型的 Reactor 式网络应用,Redis 能够达到如此高的性能,必然要依靠足够可靠的事件循环库。 Redis 内置了一个高性能事件循环器,叫做 AE。其定义和实现可以在ae*.h/cpp这些文件中找到。

AE 本身就是 Redis 的一部分,所以整体设计原则就是够用就行。也正因为这个背景,AE 的代码才可以简短干净,非常适合阅读和学习。

本文将基于 Redis 5.0.6 的源码分析下其事件循环器(AE)的实现原理。

同时本人也提供了一个Redis 注释版,用以辅助理解 Redis 的源码。

点击阅读全文

9251 次点击
所在节点    Redis
5 条回复
cyhone
2019-11-20 11:46:10 +08:00
原文链接: https://www.cyhone.com/articles/analysis-of-redis-ae/

欢迎大家关注公众号及同名知乎专栏:编程沉思录
c0011
2019-11-20 11:56:06 +08:00
楼主剖析源码有什么技巧吗?
cyhone
2019-11-20 19:23:10 +08:00
@c0011 我说一下自己看代码时候的一些感受,不一定适用:
首先在代码的选择上,尽量选择一些自己熟悉其使用和背景的代码来看,最好是和目前业务相关的。这样可以看源码的时候也更容易理解一些

其次是工具上,vscode 当然是必备的了,如果有条件使用 clion、idea、goland 这种跳转良好,便于 debug 的 IDE,可以随时打断点下看下整个代码的工作流程。

最后有个小技巧,可以选择性的看一下这个源码的 commit 记录,尤其是 fix 和优化的 commit,这样可以更好地理解作者代码这么写背后的抉择,更容易从作者的角度理解代码。
c0011
2019-11-20 20:06:48 +08:00
@cyhone 谢谢,看您的博客,感觉您剖析源码挺快的,怎么做到的啊?
cyhone
2019-11-20 21:07:49 +08:00
@c0011 可能是因为看源码有一些积累之后,阅读速度自然会稍微快一些吧。

不过这篇 redis ae 的分析文章,本身因为 redis 这块就比较简单,所以看代码没花多少工夫。

上一篇关于 Filebeat 的花了好几天来看,不过恰好是因为工作刚需,必须要搞懂,所以 Filebeat 是花了一些工作时间来看~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX