深入学习Redis高可用的基石:主从复制

作者:IT科技 来源:人工智能 浏览: 【】 发布时间:2025-11-05 09:33:30 评论数:
深入学习Redis高可用的基石:主从复制
复制/* Replication cron function,深入石主 called 1 time per second. */  void replicationCron(void) {     static long long replication_cron_loops = 0;     /* Non blocking connection timeout? */     if (server.masterhost &&         (server.repl_state == REDIS_REPL_CONNECTING ||          slaveIsInHandshakeState()) &&          (time(NULL)-server.repl_transfer_lastio) > server.repl_timeout)     {         redisLog(REDIS_WARNING,"Timeout connecting to the MASTER...");         undoConnectWithMaster();     }     /* Bulk transfer I/O timeout? */     if (server.masterhost && server.repl_state == REDIS_REPL_TRANSFER &&         (time(NULL)-server.repl_transfer_lastio) > server.repl_timeout)     {         redisLog(REDIS_WARNING,"Timeout receiving bulk data from MASTER... If the problem persists try to set the repl-timeout parameter in redis.conf to a larger value.");         replicationAbortSyncTransfer();     }     /* Timed out master when we are an already connected slave? */     if (server.masterhost && server.repl_state == REDIS_REPL_CONNECTED &&         (time(NULL)-server.master->lastinteraction) > server.repl_timeout)     {         redisLog(REDIS_WARNING,"MASTER timeout: no data nor PING received...");         freeClient(server.master);     }     //此处省略无关代码……     /* Disconnect timedout slaves. */     if (listLength(server.slaves)) {         listIter li;         listNode *ln;         listRewind(server.slaves,&li);         while((ln = listNext(&li))) {             redisClient *slave = ln->value;             if (slave->replstate != REDIS_REPL_ONLINE) continue;             if (slave->flags & REDIS_PRE_PSYNC) continue;             if ((server.unixtime - slave->repl_ack_time) > server.repl_timeout)             {                 redisLog(REDIS_WARNING, "Disconnecting timedout slave: %s",                     replicationGetSlaveName(slave));                 freeClient(slave);             }         }     }     //此处省略无关代码……  }  1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.