您的位置:首页 > 数据库 > Redis

Redis源码学习随笔

2018-04-21 14:03 169 查看

数据结构

简单动态字符串SDS(Simple Dynamic String)

使用sdshdr结构体保存字符串长度,使获取字符串长度时间复杂度为O(n)

动态空间管理

动态扩张机制(字符串变长后自动触发,假设变长后长度为len)

如果len < 1M,则预留长度也为len;

如果len >= 1M, 则预留长度为1M;

动态缩减机制(也叫惰性空间释放)

字符串长度变小时,不会自动触发,而是留有接口来清除无用空间

代码语法

struct __attribute__ ((__packed__)) sdshdr8 {
uint8_t len; /* used */
uint8_t alloc; /* excluding the header and null terminator */
unsigned char flags; /* 3 lsb of type, 5 unused bits */
char buf[];
};


使用"struct attribute ((packed)) sdshdr5"来指示编译器不要进行字节对齐

flag低3位表示类型,类型跟据最大长度区分,高5位预留

使用s[-1] (s为指向buf的指针)指向flag,多用于判断字符串类型

使用##来拼接宏

双端链表

自带链表长度的双向链表,没有特别之处

字典

跳跃表

整数集合

压缩对象

对象

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: