这里用的是redis5.0.5
在不修改源文件的情况下,拷贝以下文件:
adlist.c adlist.h atomicvar.h config.h mytest zmalloc.c zmalloc.h
编写测试代码:
#include <stdio.h>
#include "adlist.h"
#include "zmalloc.h"
void *my_dup(void *o)
{
printf("do %s\n", __func__);
return NULL;
}
void my_free(void *o)
{
printf("do %s\n", __func__);
zfree(o);
}
int my_match(void *ptr, void *key)
{
printf("do %s\n", __func__);
return 0;
}
int main(void)
{
list *l;
l = listCreate();
if (NULL == l){
printf("error\n");
return 1;
}
listSetFreeMethod(l, my_free);
listSetDupMethod(l, my_dup);
listSetMatchMethod(l, my_match);
int i = 0;
char *item = NULL;
for (i=0; i<5; i++){
item = (char *)zmalloc(sizeof(char));
*item = i;
listAddNodeHead(l, item);
}
for (i=0; i<5; i++){
item = (char *)zmalloc(sizeof(char));
*item = i+100;
listAddNodeTail(l, item);
}
printf("list len=%lu\n", listLength(l));
listIter *li =NULL;
listNode *lnode = NULL;
li = listGetIterator(l, AL_START_HEAD);
while(li != NULL){
lnode = listNext(li);
if (NULL == lnode){
break;
}
printf("===%d\n", *(char *)(lnode->value));
if (*(char *)(lnode->value) < 10){
listDelNode(l, lnode);
}
}
printf("list len=%lu\n", listLength(l));
listReleaseIterator(li);
listRelease(l);
return 0;
}
本文主要探讨了Redis中的List数据结构,通过分析5.0.5版本的源代码,涵盖了adlist、atomicvar、zmalloc等相关组件。在不修改源文件的条件下,文章介绍了如何复制相关源文件并进行测试代码的编写,以帮助读者深入理解Redis List的实现原理。
8615

被折叠的 条评论
为什么被折叠?



