摘要: 事件处理器: ​ Redis采用Reactor模式作为自己的网络事件处理器,可以看作是单线程单Reactor模型。 一、主要结构体: 1、事件: /* File event structure */ typedef struct aeFileEvent { /* 事件类型:可读or可写 */ int 阅读全文
posted @ 2022-02-06 17:15 macguz 阅读(179) 评论(0) 推荐(0)
摘要: 故障转移状态机: 一、状态机函数sentinelFailoverStateMachine: ​ 终于进入故障转移,先看一下状态机函数: void sentinelFailoverStateMachine(sentinelRedisInstance *ri) { redisAssert(ri->fla 阅读全文
posted @ 2022-02-06 15:28 macguz 阅读(97) 评论(0) 推荐(0)
摘要: 1、检测主观下线状态: void sentinelCheckSubjectivelyDown(sentinelRedisInstance *ri) { mstime_t elapsed = mstime() - ri->last_avail_time; /* Check if we are in n 阅读全文
posted @ 2022-02-06 15:25 macguz 阅读(160) 评论(0) 推荐(0)
摘要: Acting half: 一、进入故障转移状态之前: void sentinelHandleRedisInstance(sentinelRedisInstance *ri) { // ... // ... /* ACTING HALF */ /* We don't proceed with the 阅读全文
posted @ 2022-02-06 15:25 macguz 阅读(59) 评论(0) 推荐(0)
摘要: Monitor half: ​ Sentinel通过两种方式获取信息: INFO命令(通过命令连接)向其他主服务器或从服务器获取信息; 订阅hello频道,获取其他Sentinels发布的信息; 一、建立连接: ​ Sentinel在连接主服务器或者从服务器时,会同时创建命令连接和订阅连接,但是在连 阅读全文
posted @ 2022-02-06 15:24 macguz 阅读(74) 评论(0) 推荐(0)
摘要: 一、概述: 调用链: serverCron → sentinelTimer → sentinelHandleDictOfRedisInstances → sentinelHandleRedisInstance 重要函数 这里只是给出表格,下面几节会具体分析 名称 功能 sentinelTimer 由 阅读全文
posted @ 2022-02-06 15:23 macguz 阅读(65) 评论(0) 推荐(0)