Redis源码分析--命令传播

命令传播:

​ 命令传播有两个对象:

  1. AOF文件:

    ​ AOF文件接收服务器发来的命令;

  2. 主从复制模式下的从服务器:

    ​ 从服务器与主服务器同步后,进行命令传播,从服务器接收主服务器发来的命令并执行[1];

propagate函数会在call函数[1]中被调用,所以服务器执行命令,数据库状态产生变化时,通过命令传播,来尽可能实现数据一致性;

void propagate(struct redisCommand *cmd, int dbid, robj **argv, int argc,
               int flags)
{
    if (server.aof_state != REDIS_AOF_OFF && flags & REDIS_PROPAGATE_AOF)
        /* 命令传播给AOF文件 */
        feedAppendOnlyFile(cmd,dbid,argv,argc);
    if (flags & REDIS_PROPAGATE_REPL)
        /* 命令传播给从服务器 */
        replicationFeedSlaves(server.slaves,dbid,argv,argc);
}
  • L6:将命令写入AOF缓冲区,当AOF重写正在进行时,也会写入AOF重写缓冲区;发送给客户端的时机在事件循环[2]的beforesleep函数中;
  • L9:将命令写给从服务器(addReply*[1]),可能也会写入复制积压缓冲区[3](backlog),发送时机见[1];

参考:

  1. Redis源码分析--服务器(2)执行命令的过程 - macguz - 博客园 (cnblogs.com)

  2. Redis源码分析--事件处理器 - macguz - 博客园 (cnblogs.com)

  3. Redis源码分析--主从复制(2)主服务器执行SYNC命令 - macguz - 博客园 (cnblogs.com)

posted @ 2022-02-08 18:28  macguz  阅读(180)  评论(0编辑  收藏  举报