Redis五种数据类型的底层实现

String

        String是Redis最基本的数据类型,它的底层数据结构是一个SDS简单的动态字符串(dynamic string),实际上是一个字节数组。

 

Hash

         Hash是由zipListhashTable组成,默认是zipList存储,当zipList达到阈值之后就会转成hashTable,但是这个过程是不可逆的。

当两个条件都满足时使用zipList否则使用HashTable

hash-max-ziplist-entries:中哈希对象保存的键值对数量小于 512 个;
hash-max-ziplist-value:中的键值对的键和值的字符串长度都小于等于 64byte;

zipList:

        ziplist 是一个特殊的双向链表没有维护双向指针prev next;而是存储上一个entry的长度和当前entry的长度,通过长度推算下一个元素在什么地方

List

        List底层由quicklist组成:

        quicklist是一个双向链表,而且是一个基于ziplist的双向链表,quicklist的每个节点都是一个ziplist,结合了双向链表和ziplist的优点。

Set

        Set是一个无序并唯一的键值集合,底层由intsethashTable组成。当元素都是long类型且元素的个数小于等于set-max-inset-entries时,用intset

ZSet

  Zset是一个有序集合,底层是由zipList和skipList组成,默认是zipList,当集合中元素的数量超过zset_max_ziplist_entries 的值(默认值为 128 ),或者集合中单个元素的长度超过zset_max_ziplist_value 的值(默认值为 64 )时,zipList就会变成skipList。

跳表增删查的时间复杂度都是O(logn)

对于Zrange(),使用红黑树的效率是O(mlogn),跳表是O(logn+m)


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值