redis-源码学习总结.

sds (Simple dynamic string)

sdsHeader

sdsHdr{
size_t len;
size_t alloc;
size_t flag
char [] buf;//柔性数组,内存分配时不占用空间,根据需要可以动态构建该区域,且内存空间连续
}

List (双链表实现)

rio (面向stream的IO抽象层)

实现了sds,file,socket,fd的相关读写

其中针对aof(Append only file)文件,定义了序列化协议 *<argv_num>\r\n$<count>\r\n<payload>\r\n

开启redis aof,需要在redis.conf中配置appendonly yes

例子:假如需要往aof中写入字符串Hello,实际写入的是$5\r\nHello

例子:redis-cli执行set test abc

那么aof文件将会追加下面这段内容

*3
$3
set
$4
test
$3
abc

翻译成人话就是:三个字符串,分别为set test abc

dictht (HashTable)

其他

//设置状态
flags |= STATE_OEPN

//取消状态
flags &= ~STATE_OPEN

void updateFlag(int*flags,int flag,int enable){
if(enable){
*flags |= flag;
}else{
*flags &= ~flag;
}
}