Redis数据类型,Redis的底层数据结构,String, List(LinkedList,ZipList,QuickList),Set,ZSet,Hash(哈希表,压缩列表)

目录

1 String

2 List(LinkedList,ZipList,QuickList)

3 Set(哈希表)

4 ZSet(跳表,哈希表,压缩列表)

5 Hash(哈希表,压缩列表)


1 String

1、RAW分为两部分,redisobject他是后面指向SDS,先申请redisObject的内存空间,在申请SDS的内存空间,释放也有两次操作,所以性能差

2、EMBSTR只有一部分redisobjectSDS合并了,申请一块内存空间就行了,字符串大小在44字节以内就是这种模式,两块加一起也不超过64字节

3、INT编码:存储的是整数类型,转为二进制位

2 List(LinkedList,ZipList,QuickList)

类似链表 两边操作

1、LinkedList:普通链表,可以双端访问,占用空间高,内存碎片多

2、ZipList:压缩链表,可以双端操作,内存占用低,存储上限低通过记录节点的大小来推算出内存地址,当前节点记录的是前一个节点,减去或加上当前节点就能得到前后节点的地址

3、QuickLIst(3.2以后):LInkedList+ZipList,双端访问,内存占用低,包含多个ZipList,存储上限高

3 Set(哈希表)

有交集和并集的功能,好友的共同关 注,保证元素的唯一,判断元素是否存在,

哈希表(Dict字典)

1、为了查询效率和唯一性,set采用的HT编码(Dict),Dict的key来存储元素,value统一为null

2、当存储的所有数据都是整数,并且元素不超过set-max-intset-entries(可以在配置文件中配)时,set会采用IntSet编码(底层可以看做一个变长的数组,底层会排序,二分查找算法进行快速查找),节省内存

4 ZSet(跳表,哈希表,压缩列表)

可排序,分为score(值)值和member(键)值

根据score排序

member必须唯一

可根据member查询分数

键值存储,键必须唯一,可排序

SkipList(跳表):可排序,并且可以同时存储score和ele值(member)

HT(Dict):可以键值存储,并且根据key找value

内部同时有这两种,当元素不多的时候,优势不明显,浪费内存,因此会采用ZipList结构来节省空间

满足 :元素数量 zset_max_zeplist_entries,默认128 ,元素大小小于64字节

5 Hash(哈希表,压缩列表)

因为特性和ZSet基本上差不多,所以底层编码采用的编码与Zset基本上一致,只需要把排序有关的SkipList去掉即可

Hash结构默认采用ZipList编码,用以节省内存

当数据量较大时,Hash结构会转为HT编码,也就是Dict,触发条件:

满足 :元素数量 zset_max_zeplist_entries,默认512 ,元素大小小于64字节

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值