这一节我们介绍下client连接的几个标志。
client的flags的取值有如下几种:
#define REDIS_SLAVE 1 /* This client is a slave server */ #define REDIS_MASTER 2 /* This client is a master server */ #define REDIS_MONITOR 4 /* This client is a slave monitor, see MONITOR */ #define REDIS_MULTI 8 /* This client is in a MULTI context */ #define REDIS_BLOCKED 16 /* The client is waiting in a blocking operation */ #define REDIS_IO_WAIT 32 /* The client is waiting for Virtual Memory I/O */
redis支持主从复制、监控特性,对这些server的连接状态也是保存在当前server的redisClient结构中, 并在redisClient的flags标志中设置REDIS_SLAVE 、REDIS_MASTER、 REDIS_MONITOR参数。我们在后续的章节中详细分析redis的主从复制、监控等特性。
一般的client仅会设置REDIS_MULTI、REDIS_BLOCKED、REDIS_IO_WAIT中的1个或多个。REDIS_MULTI跟redis的事务支持相关,我们后续介绍。REDIS_BLOCKED标志跟redis支持的list阻塞式pop(BLPOP、BRPOP)有关,也就是当list为空的时候,会阻塞client,一直到有元素加入list,此时再pop。REDIS_IO_WAIT跟命令字有关,对于某些命令,如果启用vm的话,需要提前加载其key。我们在命令处理章节中分析。