Redis 基础数据类型

文章详细介绍了Redis中几种重要的数据结构,包括简单动态字符串(SDS)用于优化C语言的字符串操作,链表提供无环双向链接,字典使用双哈希表策略,跳跃表实现快速查找,以及整数集合、压缩列表等。此外,还讨论了不同数据对象如字符串、列表、哈希、集合和有序集合的底层实现及编码转换规则。
摘要由CSDN通过智能技术生成

Redis底层数据结构

简单动态字符串(Simple Dynamic String)

特点:主要解决C语言不支持字符串功能,对C语言字符数组进行扩充增加字符串属性与方法。

优点:

  1. 通过增加长度属性,减少获取长度的复杂度
  2. 通过预分配和惰性释放来,减少修改字符串长度时需要的内存分配次数
  3. 二进制安全(RedisAPI通过二进制来处理字符数组,不会象C一样改变数据内容)
  4. 因本质上存放数据的依然是C字符数组,所有兼容C字符串函数     

链表

特点

  • 无环:头节点的前一个节点,和尾节点的下一个节点,均指向NULL
  • 双向:每个节点都有前一个和下一个节点

优点

  1. 带头尾节点与节点数量,有效简化查询
  2. 可支持多种数据类型

字典

特点:

  • 使用Hash Table来存储数据,且使用两个Hash表,一个用于存储数据,另一个用于rehash时中转。

优点:

  1. 有效减少Rehash的开销(使用渐进式rehash,“标记-复制”)
  2. 在作为数据库使用时,使用MurmurHash2算法(4.0以上使用SipHash)

跳跃表

扩展阅读(【有料】Redis(2)——跳跃表-CSDN博客

特点:

  • 由zskiplist和zskipnode组成,zskiplist保存跳表的层数、长度

优点:

  1. 底层使用双向链表存储数据,数据查找更加方便快速
  2. Redis 跳跃表默认允许最大的层数是 32 ,通过ZSKIPLIST_MAXLEVEL 设置   

整数集合

特点

  • 只支持升级,不支持降级通过Int数组实现

优点:

  1. 升级操作,提高了灵活性,节约了内存

压缩列表

特点:

  • 可以有多个节点,每个节点可保存一个字节数组或整数值
  • 添加和删除节点有一定几率会引起连锁更新操作

优点:

  1. 紧凑的顺序型数据结构,节约内存

数据对象

数据对象通过type属性来确定对象类型.

具体如下:

类型常量对象名称
REDIS_STRING字符串对象
REDIS_LIST列表对象
REDIS_SET集合对象
REDIS_HASH哈希对象
REDIS_ZSET有序集合对象

字符串对象

底层数据结构:小于等于44个字节使用EMSTR,大于44个字节使用SDS结构

编码转换

int->raw:追加非数字内容则转换为RAW

embstr->raw ,追加或者修改内容长度大于44个字节

列表对象

底层数据结构:使用ziplist(压缩编码)和Linkedlist(链表)

编码转换

ziplist->linkedlist

  1. 列表中有元素长度大于64字节
  2. 列表元素个数大于等于512个

可在配置文件中修改list-max-ziplist-value,list-max-ziplist-entries修改默认配置

哈希对象

底层数据结构:ziplist和hashtable

编码转换

ziplist->HashTable

  1. 列表中有元素长度大于64字节
  2. 列表元素个数大于等于512个

可在配置文件中修改list-max-ziplist-value,list-max-ziplist-entries修改默认配置

集合对象

底层数据结构:isntset或者HashTable

编码转换:

intset->HashTable

集合中有非数字内容

集合的元素数量大于等于512个

set-max-intset-entries,可以修改集合元素个数上限

有序集合对象

底层数据结构:ziplist或者skiplist

编码转换:

1.集合内元素大于等于128个

2.向集合添加,超过64个字节长度的元素

zset-max-ziplist-entries :可修改集合元素个数上限

zset-max-ziplist-value:可修改集合元素长度上限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值