Redis
文章平均质量分 77
Untara
小白成长日记
展开
-
Redis底层数据结构(六)--压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么是小整数值,要么就是长度比较短的字符串,Redis就会使用压缩列表来做列表键的底层实现。 压缩列表的构成 压缩列表是Redis为了节约内存而开发的,是由一系列编码的联系内存块组成的顺序性数据结构。一个压缩列表可以包含多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。 压缩列表的各个组成部分 压缩列表各个组成部分的详细说明压缩列表节点的构成 每个压缩列表节点可以保存一个字节数.原创 2021-01-21 15:30:41 · 90 阅读 · 0 评论 -
Redis底层数据结构(五)--整数集合
整数集合是集合键的底层实现之一。 整数集合的实现 整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,可以保存类型为int16_t,int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。 contents数组是整数集合的底层实现:证书集合的每个元素都是contents数组一个数组项(item),各个项在数组中按值的大小从小到大有序地排列,并且数组中不包含任何重复项。 length属性记录了整数集合包含的元素数量,即contents数组的长度。 虽然ints原创 2021-01-21 15:17:25 · 94 阅读 · 0 评论 -
Redis底层数据结构(四)--跳跃表
跳跃表(skiplist)是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来力量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树更为简单,所以有不少程序都使用跳跃表来代替平衡树。 Redis使用跳跃表作为有序集合键的底层实现之一。 跳跃表的实现 Redis跳跃表有zskiplistNode和zskiplist两个结构定义,zskiplis原创 2021-01-20 20:28:57 · 102 阅读 · 0 评论 -
Redis底层数据结构(三)--字典
字典,又称符号表,关联数组或者映射,是一种用于保存键值对(key-value)的抽象数据结构。 字典在Redis里的应用:Redis数据库就是使用字典来作为底层实现的,对数据库的增,删,改,查操作也是建立在对字典的操作之上的。除了表示数据库之外,字典还是哈希键的底层实现之一。 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,每个哈希表节点就保存了字典中的一个键值对。 哈希表 结构定义: table属性是一个数组,数组中每个元素都是指向dictEntry原创 2021-01-20 17:05:35 · 106 阅读 · 0 评论 -
Redis底层数据结构(二)--链表
链表实现了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活调整链表的长度,是Redis列表键的底层实现。Redis构建了自己的链表实现。 除了链表键之外,发布与订阅,慢查询,监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(output buffer) 链表和链表节点的实现 链表节点的结构: 多个listNode可以通过prev和next指针组成双端链表: 由多个listNode组成的双端链表链表结构原创 2021-01-20 10:53:00 · 70 阅读 · 0 评论 -
Redis底层数据结构(一)--简单动态字符串
简单动态字符串(simple dynamic string,SDS) 比如: 127.0.0.1:6379> set msg helloredis OK Redis将在数据库中创建一个新的键值对,其中: 键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串"msg"的SDS。 键值对的值是也是一个字符串,对象的底层实现是一个保存着字符串"helloredis"的SDS 127.0.0.1:6379> rpush devtools "java" "php" "c" (inte原创 2021-01-20 09:53:56 · 114 阅读 · 0 评论 -
Redis对象系统
beizhu原创 2021-01-18 21:06:24 · 71 阅读 · 0 评论