打开redis/src目录下的
vi t_zset.c
按下 /rand 搜索到下面的方法
/* Returns a random level for the new skiplist node we are going to create.
* The return value of this function is between 1 and ZSKIPLIST_MAXLEVEL
* (both inclusive), with a powerlaw-alike distribution where higher
* levels are less likely to be returned. */
int zslRandomLevel(void) {
int level = 1;
//这里产生一个随机数,当随机数大于等于(ZSKIPLIST_P * 0xFFFF)时跳出循环。
while ((random()&0xFFFF) < (ZSKIPLIST_P * 0xFFFF))
level += 1;
return (level<ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL;
}
在当前目录搜索 ZSKIPLIST_MAXLEVEL
grep ZSKIPLIST_MAXLEVEL ./*
在这里可以看到,server.h 文件中定义了ZSKIPLIST_MAXLEVEL变量。
./server.h:#define ZSKIPLIST_MAXLEVEL 64 /* Should be enough for 2^64 elements */
打开server.h文件
vi server.h
搜索变量
/ZSKIPLIST_MAXLEVEL
参考:https://blog.csdn.net/men_wen/article/details/70040026