Redis源码分析(一):aeMain()函数概述

本文探讨了Redis源码中的aeMain()函数,该函数包含一个大循环,类似于Linux Kernel的进程调度。文章介绍了Redis如何通过beforeSleep()和aeProcessEvents()处理事件,涉及集群故障转移、过期Key清理、AOF缓冲区写入等功能,并提到了相关数据结构的作用。
摘要由CSDN通过智能技术生成

缘起

临近毕业大部分事情处理的差不多,只想安静的看点东西,思考一下。找来了redis源码配合《Redis设计与实现》看了一下。大概浏览了一遍,看到main函数的最后其实就是aeMain()当中的一个大循环,对这个大循环有些兴趣。这不由得让我想起之前了一部分的Linux Kernel代码,Kernel源码最后其实也是一个大的循环,根据进程调度算法选择进程运行,模式还是比较相似。当然,Kernel源代码肯定要比这个复杂 ^_^
写下这篇博文也算是对学习过程的一个记录和思考。

对NoSQL的接触

在接触redis之前,最初接触到的比较成熟NoSQL是叫做Tokyo Cabinet的一套Key-Value存储(在这之前看过国人写的一个叫做Hash DB的Key-Value)。之前也看过它当中的hashdb的实现,Tokyo Cabinet与redis不同之处就是Tokyo Cabinet是一个持久化的Key-Value存储,每个db都会对应一个磁盘上持久化的文件。
继续本文正题。^_^

redis.c中的大循环

从下面的代码可以看到redis最后其实就是一个大的循环。只要redis服务不停止就不断调用beforeSleep()和aeProcessEvents()函数。

//redis.c
int main()
{
    //................
    aeSetBeforeSleepProc(server.el,beforeSleep);
    aeMain(server.el);
    aeDeleteEventLoop(server.el);
    return 0;
}
//ae.c
void aeMain(aeEventLoop *eventLoop) {
    eventLoop->stop = 0;
    while (!eventLoop->stop) {
        if (eventLoop->beforesleep != NULL)
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值