首页 > 编程知识 正文

redis高级数据类型,redis中key的数据结构

时间:2023-05-04 20:20:43 阅读:31311 作者:932

Redis数据结构和数据类型从《Redis设计与实现》开始整理

Redis数据结构的简单动态字符串Redis不使用传统的c语言字符串表示(以空字符结束的字符串数组,以下称为c字符串),而是独自构建简单动态字符串(simple dynamic string,SDS )的抽象类型,并生成Redis的数据

差异总结:

c字符串SDS获取字符串长度的复杂度为o(n )获取字符串长度的复杂度为o )1) API可能不安全,缓冲区溢出API可能安全。 要在不引起缓冲区溢出的情况下修改字符串长度n次,必须执行n次内存重新分配修改字符串长度n次。 最多需要执行n次内存重新分配。 可以只存储文本数据,可以存储二进制数据,可以使用所有string.h库中的函数,也可以使用某些string.h库中的函数链表。 这提供了一种高效的节点重新定位和有序的节点访问方法,通过添加或删除节点可以灵活地调整链表的长度

注意:这里是双端链接列表。 对于每个链表,使用一个list结构,其中包含标题节点指针、页脚节点指针和链表长度等信息。

字典也称为符号表、关联数组或映射,是保存键-值对的抽象数据结构。

Redis的词典是基于舒适的老虎钟实现的。 一个舒适的老虎钟中可以有多个舒适的老虎钟节点,每个舒适的老虎钟节点都包含一对词典键值。

skiplist(skiplist )是一种规则的数据结构,通过在每个节点中维护多个指向其他节点的指针来提供对节点的快速访问。

跳转表支持平均O(logN,最坏o[n]复杂度的节点搜索,也可以通过顺序操作批量处理节点。

大多数情况下,跳表的效率与平衡木相当,跳表的实现比平衡木更简单,因此用跳表代替平衡树的程序也不少。

与红黑树相比:

其中,插入、删除、检索、反复输出有序数组的一些操作也可以是红黑树,时间复杂度与跳转表相同。

但是,在按区间查找数据的操作中,红黑树的效率并不像表面上那么高。 跳转表可以通过o(logn )时间复杂度确定区间的起点,并在原始链表中按顺序向后查询。 这非常有效率。

整数集合整数集合(intset )是集合密钥的下级实现之一,如果某个集合只包含整数值元素,且该集合的元素数少,则Redis使用整数集合作为集合密钥的下级实现。

整数集合的基础实现为数组,该数组以有序、无重复的方式存储集合元素,如果需要,程序会根据新添加的元素类型改变该数组的类型,即int16- int32。

“列表压缩列表”(ziplist )是列表键和ajdbq的基本实现之一。 如果列表键中包含的列表项较少,而每个列表项都是较小的整数值或较短的字符串,则Redis将使用压缩列表实现列表键的较低级别。

压缩列表是Redis为了节约存储器而开发的,是由一系列特殊编码的连续存储器块组成的顺序型(sequential )数据结构。 压缩列表可以包含任意数量的节点(entry ),每个节点可以包含字节数组或整数值。

Redis数据类型Redis使用对象来表示数据库中的键和值。 每次在Redis数据库中创建新的键-值对时,至少创建两个用作键-值对键(键对象)的对象和两个用作键-值对值(值对象)的对象。 对于存储在Redis数据库中的键值对,密钥始终是字符串对象,其值可以是字符串对象、列表对象、畅快的老虎对象、集合对象或者有序集合对象

每种类型的对象至少使用了两种不同的编码。 不同的数据类型和编码的对象如下:

类型代码对象使用REDIS_STRINGREDIS_ENCODING_INT整数值实现的字符串对象redis _ string redis _ encoding _ embstrembstr代码实现使用对象redis _ list redis _ encoding _ zip list压缩列表实现的列表对象redis _ list redis _ encoding _ linked list双列表实现使用IS_ENCODING_HT词典实现的快捷老虎对象REDIS_SETREDIS_ENCODING_INTSET整数集合实现的集合对象redis _ set redidis dis_set列表实现有序集合对象使用redis _ zsetredis _ encoding _ skip list跳转表和词典实现的有序集合对象

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。