KEEP GOING

Practice makes Perfect.


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

Redis源码阅读(十四) 有序集合对象

发表于 2018-08-27 | 分类于 源码阅读
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序,有序集合的成员是唯一的,但分数(score)却可以重复。集合中最大的成员数为 2^32 - 1 。 1. 编码有 ...
阅读全文 »

Redis源码阅读(十三) 集合对象

发表于 2018-08-23 | 分类于 源码阅读
Redis的集合是Sting类型的无序集合,集合成员唯一,集合中最大的成员数为 2^32 - 1 1. 编码集合对象的编码可以是INTSET或HT。 INTSET编码的集合对象使用整数集合作为底层实现,集合对象的所有元素都存储在整数集合中。 HT编码的集合对象使用字典作为底层实现,每个字符串对象( ...
阅读全文 »

Redis源码阅读(十二) 哈希对象

发表于 2018-08-22 | 更新于 2018-08-23 | 分类于 源码阅读
Redis的哈希对象是一个string类型的field和value的映射表,特别适合用于存储对象,每个 hash 可以存储 2^32 - 1 键值对。 1. 编码Redis中哈希对象的编码有ZIPLIST和HT。 ziplist编码的哈希对象使用压缩列表作为底层实现,有新的键值对插入时,现将键插入的 ...
阅读全文 »

Redis源码阅读(十一) 列表对象

发表于 2018-08-21 | 更新于 2018-08-23 | 分类于 源码阅读
Redis列表对象是简单的字符串列表,按照插入顺序排序,可以添加一个元素到头部或尾部,一个列表键最多可包含2^32-1个元素。 1. 编码Redis列表键的底层编码是QUICKLIST,而quicklist本质上就是以ziplist为结点的双端链表。 2. 命令 命令 作用 LINDE ...
阅读全文 »

Redis源码阅读(十) 字符串对象

发表于 2018-08-16 | 更新于 2018-08-23 | 分类于 源码阅读
1. 编码字符串对象的编码可以是int、raw、embstr三种。 int: 对象保存的是整数值,并且可以使用long类型进行表示,那么ptr中存储的就是这个long的地址,并将编码设置为int,[0, 10000)范围的可以使用共享整数。 raw: 对象保存的是字符串,且长度大于44字节,使用 ...
阅读全文 »

Redis源码阅读(九) 对象系统

发表于 2018-08-15 | 更新于 2018-08-27 | 分类于 源码阅读
Redis定义了一些基本了数据类型,如简单动态字符串、字典、跳跃表、压缩列表等等,但并未使用这些结构作为对象存储,而是定义了一套对象系统,底层使用这些数据结构进行存储,这个对象系统包括了字符串对象、列表对象、哈希对象、集合对象、有序集合对象,Redis针对不同的使用场景,设置不同的数据结构,优化其使 ...
阅读全文 »

Redis源码阅读(八) 快速列表

发表于 2018-08-14 | 更新于 2018-08-15 | 分类于 源码阅读
快速列表quicklist是一个由压缩列表ziplist组成的双端链表,链表中每个结点都有一个ziplist,每个ziplist有多个entry,主要用于列表键的底层实现,替换了原有的双端链表adlist。 1. 定义 快速列表结点 结点进行压缩后,zl指向的是压缩后的LZF结构体,其中compre ...
阅读全文 »

Redis源码阅读(七) 压缩字典

发表于 2018-08-09 | 分类于 源码阅读
1. 定义zipmap是为了优化string==>string的映射而实现的特殊编码结构,它由7部分组成,zmlen,klen,key,vlen,free,val,end,但实际上讲只有4部分,zmlen,len(klen,vlen,end),data(key,val),free。 属 ...
阅读全文 »

Redis源码阅读(六) 压缩列表

发表于 2018-08-08 | 分类于 源码阅读
压缩列表是Redis为了节省内存而设计的特殊编码的双端链表,可以存储字符串和整数,整数值保存为实际的整数而不是字符数组,它允许在链表两端进行push和pop操作,时间复杂度为O(1),很多的操作需要对内存进行重新分配,所以实际情况还与内存使用的大小有关。 1. 定义1.1 压缩列表从本质上来说,zi ...
阅读全文 »

Redis源码阅读(五) 整数集合

发表于 2018-08-08 | 分类于 源码阅读
Redis中当一个集合键只包含整数值元素,并且数量不是很多时,使用整数集合作为底层实现。 1. 定义 整数集合 encoding 集合采用的编码方式:int16_t, int32_t, int64_t length contents中包含整数的个数 contents 用于存储整数集合,通过 ...
阅读全文 »
123
郭欣成

郭欣成

Backend & Developer

26 日志
2 分类
3 标签
GitHub
© 2018 郭欣成
由 Hexo 强力驱动 v3.7.1
|
主题 — NexT.Pisces v6.3.0