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,多用于判断字符串类型
使用##来拼接宏
双端链表
自带链表长度的双向链表,没有特别之处字典
跳跃表
整数集合
压缩对象
对象
相关文章推荐
- 结合redis设计与实现的redis源码学习-23-排序(sort.c)
- Redis学习——链表源码分析
- Redis源码学习——简单动态字符串SDS(Simple Dynamic String)
- redis源码学习之压缩列表
- Redis 源码学习之 Redis 事务
- Redis学习——ae事件处理源码分析
- 向优秀代码学习:Redis 源码概览
- 结合redis设计与实现的redis源码学习-17-发布与订阅(pubsub.c)
- 源码分析redis的有序集合,学习skiplist跳跃表数据结构
- 结合redis设计与实现的redis源码学习-25-慢查询日志(slowlog)
- redis源码分析(三)redis命令学习总结—string字符串
- redis 源码学习(RDB 持久化)
- 学习Redis的源码
- redis源码学习2 功能性命令及其实现
- redis源码分析(四)、redis命令学习总结—链表List
- 结合redis设计与实现的redis源码学习-3-链表
- redis 源码学习(复制 Replication)
- Redis2.2.2源码学习——dict中的hashtable扩容和rehash
- Redis源码学习之【动态字符串】