摘要: 当一个集合只包含整数,且集合的元素数量不多时,Redis会使用整数集合作为底层实现。 6.1 整数集合的实现 可以保存int16_t、int32_t或者int64_t的整数值。并且保证集合中不会出现重复的元素。 typedef struct intset{ //编码方式 uint32_t encod 阅读全文
posted @ 2021-02-21 17:00 walker993 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 跳跃表 在每个节点维持多个指向其他节点的指针,达到快速访问节点的目的。Redis使用跳跃表作为有序集合键的底层实现之一。 5.1 跳跃表的实现 redis.h/zskiplistNode表示跳跃表节点。redis.h/zskiplist保存跳跃表节点的相关信息:节点数量、指向表头表尾节点的指针等。 阅读全文
posted @ 2021-02-21 15:54 walker993 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。 4.1 字典的实现 Redis的字段使用哈希表作为底层实现。 4.1.1 哈希表 typedef struct ditch{ //哈希表数组 dictEntry **table; // 阅读全文
posted @ 2021-02-21 15:05 walker993 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 链表提供了高效的节点重排,顺序性节点访问,并可以通过增删节点灵活调整链表的长度。链表是双向无环的。 3.1 链表和链表节点的实现 1. 节点 typedef struct listNode{ //前置节点 struct listNode *prev; //后置节点 struct listNode * 阅读全文
posted @ 2021-02-21 13:49 walker993 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 在redis中,默认字符串的表示类型是SDS(简单动态字符串),C语言传统的字符串表示只在很少的情况下用到。 2.1 SDS的定义 SDS结构: char buf[];用于保存字符串,会在字符串结尾自动添加一个空字符,遵循C字符串结尾的惯例,即用N+1字符串数组表示长度为N的字符串 unsigned 阅读全文
posted @ 2021-02-21 11:15 walker993 阅读(46) 评论(0) 推荐(0) 编辑