redis list 是否有长度限制
list 的数据结构为
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct list {
listNode *head;
listNode *tail;
void *(*dup)(void *ptr);
void (*free)(void *ptr);
int (*match)(void *ptr, void *key);
unsigned long len;
} list;
再看下获取长度 len 的宏函数定义
#define listLength(l) ((l)->len)
llen command 的实现函数
unsigned long listTypeLength(robj *subject) {
if (subject->encoding == REDIS_ENCODING_ZIPLIST) {
return ziplistLen(subject->ptr);
} else if (subject->encoding == REDIS_ENCODING_LINKEDLIST) {
return listLength((list*)subject->ptr);
} else {
redisPanic("Unknown list encoding");
}
}
可知,list 的长度是通过 list 结构中的长度字段 len 直接返回的,这是一个 unsigned long
类型的变量&