欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

redis 底层数据结构

程序员文章站 2022-07-01 15:48:38
简单动态字符串SDS 包含字符串长度,剩余可用长度,字符数组 用于Redis中所有的 string 存储 字典(map) 数组+链表形式,跟hashMap很像 链地址法解决hash冲突 rehash使用新建hash数组链表进行数据rehash迁移,扩容是大于原数组长度的第一个2的n次幂 渐进式reh ......

简单动态字符串sds

  • 包含字符串长度,剩余可用长度,字符数组
  • 用于redis中所有的string存储

字典(map)

  • 数组+链表形式,跟hashmap很像
  • 链地址法解决hash冲突
  • rehash使用新建hash数组链表进行数据rehash迁移,扩容是大于原数组长度的第一个2的n次幂
    渐进式rehash,就是不是一次性迁移完,而是在crud操作时,一点点迁移
  • 用于hash类型数据

链表

  • 双端列表,直接有列表长度属性
  • 用于list类型数据

跳跃表

  • 带分值得一种有序类链表结构
  • 每个节点中的level中存储分值相同的数据
  • 每个level中数据都有一个前进指针
  • 用于sortedset类型

整数集合

  • 底层是int数组,通过encoding决定int的长度,也可以在存储过程中进行长度升级,比如原先存储的16位整形,要存一个32位整数,就需要进行类型升级
  • 升级的好处就是类型灵活,节约内存
  • 用于数据量比较小并且都是整形的list类型

压缩列表

  • 有内存字节数,节点个数,节点等属性的顺序型结构
  • 用于整形或者长度较短的字符串的list,hash等类型

转载请注明出处