redis主从同步期间发送的各种命令和各种超时

同步期间发送的命令:

1.从服务器向主服务器发送1种命令:REPLCONF ACK offset

这个命令是主从完成同步后,从服务器定期向主服务器发送的命令。

作用有2个:1. if offet > c->repl_ack_off : c->repl_ack_off = offset

                      2. c->repl_ack_time = server.unixtime

2.主服务器向从服务器发送2种命令:a."\n"   b.PING

a."\n"是主服务器向等待 bgsave的从服务器发送的命令

作用:if (buf[0] == '\0')  server.repl_transfer_lastio = server.unixtime

b.PING是主服务器向server.slaves中的从服务器发送的命令。在server.slaves中的从服务器状态处于: START或END。

作用:1. c->lastinteraction = server.unixtime;
        2. if (c->flags & REDIS_MASTER) c->reploff += nread;



同步期间各种超时判断:

1.从服务器会进行3种超时判断:

	if (server.masterhost
			&& (server.repl_state == REDIS_REPL_CONNECTING
					|| server.repl_state == REDIS_REPL_RECEIVE_PONG)
			&& (time(NULL) - server.repl_transfer_lastio)
					> server.repl_timeout) {
		undoConnectWithMaster();
	}
	/* Bulk transfer I/O timeout*/
	if (server.masterhost && server.repl_state == REDIS_REPL_TRANSFER
			&& (time(NULL) - server.repl_transfer_lastio)
					> server.repl_timeout) {
		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) {
		freeClient(server.master);
	}


2.主服务器会进行1种超时判断:

			if ((server.unixtime - slave->repl_ack_time)
					> server.repl_timeout) {
				char ip[REDIS_IP_STR_LEN];
				int port;

				if (anetPeerToString(slave->fd, ip, sizeof(ip), &port) != -1) {
					//redisLog(REDIS_WARNING,
					//   "Disconnecting timedout slave: %s:%d",
					//  ip, slave->slave_listening_port);

				}

				// 释放
				freeClient(slave);
			}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值