Redis数据结构类型

    • String

  • 基本编码方式是raw,基于简单的动态字符串实现(SDS),存储上线512Mb;

  • 如果存储的SDS长度小于44字节,则会采用embstr编码,此时RedisObject中Object Head和要存储的SDS是一段连续空间,申请内存时只需要调用一次内存分配函数即可;

  • 如果存储的字符串是整数类型,并且大小在Long_Max范围内,则会采用int编码。直接将数据保存在RedisObject中的ptr指针位置,刚好8字节大小,不再需要SDS。

    • List

  • 在3.2版本之前,List底层实现方式LinkedList加上ZipList,当元素数量小于512并且元素大小小于63字节时采用ZipList,超过则采用LinkedList;

  • 在3.2版本之后,Redis统一采用QuickList来实现list,可以从双端访问,包含多个ZipList,存储上限高。

    • Set

  • set是redis当中的集合,不一定保证元素有序,但是一定保证元素唯一,查询效率高;

  • set底层采用Hash(Dict),Dict中用key来存储值,value统一为null;

  • 当存储的数据都是整数时,并且元素数量不超过默认值,set会采用intSet编码,节省内存;

    • ZSet

  • ZSet底层数据结构必须满足键值存储,键必须唯一,可排序;

  • 底层的数据结构是SkipList加上Hash(Dict)来实现的;

  • 当元素数量不多的时候,Dict和SkipList的优势不明显,而且更耗费内存,此时ZSet底层会采用ZipList结构;

  • ZipList本省没有排序和键值对的功能,因此需要对ZipList继续进行编码,因此element在前,score在后;score越小越接近队首,按照score值升序排列。

    • Hash

  • Hash底层采用的数据结构和ZSet类似,只需要把排序有关的SkipList去掉即可;

  • Hash默认采用ZipList,节省内存,相邻的两个entry分别保存键和值;

  • 当数据量较大的时候,Hash底层采用Dict结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值