- 博客(5)
- 收藏
- 关注
原创 redis源码解析-基础数据-skiplist(跳跃表)
太长不看版跳跃表是有序集合的底层实现之一, 除此之外它在 Redis 中没有其他应用。每个跳跃表节点的层高都是 1 至 64 之间的随机数层高越高出现的概率越低,层高为i的概率为(1−p)∗pi−1,(p=1/4)(1-p) * p^{i-1}, (p=1/4)(1−p)∗pi−1,(p=1/4)。跳跃表中,分值可以重复, 但对象成员唯一。分值相同时,节点按照成员对象的大小进行排序。...
2019-11-26 13:57:35 757 4
原创 Redis源码解析-基础数据-qulicklist(快速列表)
太长不看版快速列表是一个元素为压缩列表的双向链表。快速列表是列表对象list的底层实现之一。快速列表是在Redis3.2版本引入的。快速列表节点中压缩列表的最大字节长度(配置项为负数时)或最多元素个数(配置项为正数时)由配置项 list-max-ziplist-size 决定,默认约束为最大长度8Kb。快速列表提供了选项可以使用LZF压缩算法对中间的节点中的ziplist进行压缩,列...
2019-12-14 20:46:32 211
原创 Redis源码解析-基础数据-ziplist(压缩列表)
太长不看版压缩列表是一种为节约空间而实现的线性数据结构,本质是字节数组。压缩列表元素可以为整数或字符串。压缩列表在快速列表、列表对象和哈希对象中都有使用。压缩列表添加(平均复杂度O(n))与删除节点(平均复杂度O(n)),可能会触发连锁更新(平均复杂度O(n^2)),因为触发机率不高所以不影响性能。因为节点存在字符串,字符串匹配为O(n)复杂度,所以压缩列表查找节点平均复杂度为O(n...
2019-12-03 22:24:11 482
原创 redis源码解析-基础数据-dict
太长不看版redis字典底层使用哈希表实现使用除留余数法进行散列,用到了SipHash算法使用单独链表法解决冲突通过扩张(首个大于2 * used的2n2^n2n)与收缩(首个大于used的2n2^n2n)哈希表维持载荷因子合理。有持久化子进程时因子>=5 扩张,不能收缩。无持久化进程时,因子 >= 1扩张, < 0.1收缩。rehash操作是渐进处理的,分散在触...
2019-11-10 15:52:50 214
原创 redis源码解析-基础数据-sds(simple dynamic string)
太长不看版redis内部使用sds(自己封装的结构体)作为默认字符串类型sds中len字段记录字符串长度,可以常数复杂度获取长度sds使用len来判断字符串是否结束,实现了二进制安全修改sds时会按需分配内存大小,杜绝缓冲区溢出sds空间扩展时会进行预申请,减少内存分配次数预申请策略: 1M以内, 每次为len * 2,超过1M每次为 len + 1Mredis内部实现中没有...
2019-11-04 00:43:04 182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人