Redis
lw_yang
喜欢学习,努力工作,也享受生活,崇尚简单的快乐和幸福 ,为理想而奋斗
展开
-
Redis5.0源码解析(一)----------简单动态字符串(SDS)
基于Redis5.0Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。SDS定义<sds.h>typedef char *sds;/* Note: sdshdr5 i...原创 2018-11-21 16:05:01 · 1265 阅读 · 0 评论 -
Redis5.0源码解析(二)----------链表
链表提供了高效的节点重排能力, 以及顺序性的节点访问方式, 并且可以通过增删节点来灵活地调整链表的长度每个链表节点使用一个 adlist.h/listNode 结构来表示:/* Node, List, and Iterator are the only data structures used currently. */typedef struct listNode { struc...原创 2018-11-21 21:45:44 · 344 阅读 · 0 评论 -
Redis5.0源码解析(三)----------字典(详细)
基于Redis5.0在字典中, 一个键(key)可以和一个值(value)进行关联(或者说将键映射为值), 这些关联的键和值就被称为键值对字典中的每个键都是独一无二的, 程序可以在字典中根据键查找与之关联的值, 或者通过键来更新值, 又或者根据键来删除整个键值对, 等等字典的实现Redis 的字典使用哈希表作为底层实现, 一个哈希表里面可以有多个哈希表节点, 而每个哈希表节点就保存了字...原创 2018-11-23 00:20:17 · 880 阅读 · 0 评论 -
Redis5.0源码解析(四)----------跳跃表
跳跃表(skiplist)是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的跳跃表支持平均 O(log N) 最坏 O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。在大部分情况下, 跳跃表的效率可以和平衡树相媲美, 并且因为跳跃表的实现比平衡树要来得更为简单, 所以有不少程序都使用跳跃表来代替平衡树。Redis 使用跳跃表作为有...原创 2018-11-23 14:51:12 · 564 阅读 · 0 评论 -
Redis5.0源码解析(五)----------整数集合
基于redis5.0整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现redis> SADD numbers 1 3 5 7 9(integer) 5redis> OBJECT ENCODING numbers"intset"整数集合的实现整数集合(int...原创 2018-11-23 15:35:23 · 679 阅读 · 0 评论 -
Redis5.0源码解析(六)----------Redis对象
基于Redis5.0之前介绍了 Redis 用到的所有主要数据结构, 比如简单动态字符串(SDS)、双端链表、字典、跳跃表、整数集合, 等等,但Redis 并没有直接使用这些数据结构来实现键值对数据库, 而是基于这些数据结构创建了一个对象系统, 这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象, 每种对象都用到了至少一种我们前面所介绍的数据结构对象的类型与...原创 2018-11-26 14:10:36 · 1058 阅读 · 0 评论 -
Redis5.0源码解析(七)----------字符串对象
基于Redis5.0字符串对象字符串对象的编码可以是 int 、 raw 或者 embstr如果一个字符串对象保存的是整数值, 并且这个整数值可以用 long 类型来表示, 那么字符串对象会将整数值保存在字符串对象结构的 ptr 属性里面(将 void* 转换成 long ), 并将字符串对象的编码设置为 int如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 44 ...原创 2018-11-26 14:56:20 · 264 阅读 · 0 评论