Redis Server 相关源码阅读笔记,源码文件 server.h & server.c


从 Redis 的 main 函数中,可以发现在 Redis 启动时主要做了以下几个工作:

initServer

event

有关 File event acceptTcpHandler(acceptTLSHandler/acceptUnixHandler) 的内容会在客户端相关笔记中介绍,本次仅介绍 Time event serverCronbeforeSleep

serverCron

Redis 在初始化时,会添加一个 time event serverCron 至 event loop,其运行频率为 server.hz。如果配置项 dynamic_hz 设置为 yes,则该频率会随着当前客户端连接数的增加而增加,上限为 CONFIG_MAX_HZ (500)。不过该函数内实际工作的运行频率由 run_with_period(milliseconds){...} 中的 millisecondsserver.hz 共同确定。

在该定期执行的任务中,主要做了以下工作:

clientsCron

TODO

databasesCron

在此定期执行的任务中,主要做了以下工作:

  • 清理过期 key: activeExpireCycle
  • 碎片整理: activeDefragCycle
  • 当前子进程无任务时:
    • Resize:若当前 keyspace redisDb->dict 中 slot 数量大于 DICT_HT_INITIAL_SIZE (4),且哈希表元素个数低于 slot 数量的 $10\%$,则调整 slot 数量 (redisDb->expires 同理)
    • 渐进式 Rehash:若配置项 activerehashingyes,且当前数据库正在进行 Rehash,则尝试进行时长为 $1ms$ 的 Rehash 操作

replicationCron

TODO

clusterCron

TODO

beforeSleep

TODO