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

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

  •  
  •   cyhone Nov 20, 2019 10081 views
    This topic created in 2372 days ago, the information mentioned may be changed or developed.

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

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

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

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

    点击阅读全文

    5 replies    2019-11-20 21:07:49 +08:00
    cyhone
        1
    cyhone  
    OP
       Nov 20, 2019
    原文链接: https://www.cyhone.com/articles/analysis-of-redis-ae/

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

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

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

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

    上一篇关于 Filebeat 的花了好几天来看,不过恰好是因为工作刚需,必须要搞懂,所以 Filebeat 是花了一些工作时间来看~
    About     Help     Advertise     Blog     API     FAQ     Solana     5557 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 02:48 PVG 10:48 LAX 19:48 JFK 22:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86