首先是String,它的底层结构是SDS动态字符串,它具有记录长度的len属性,所以可以存储二进制的值,同时,它有空间预分配的功能。然后是list列表,在redis3.2后,它的底层是使用到了quicklist快速链表,每一个节点是quicklistNode,这个节点指向了一个压缩列表,这样能充分使用到压缩列表的好处。然后是hash,常见的使用比如购物车,key为用户id,value为商品id和数量构成的一些entry,它的底层主要使用到的是哈希表,和我们正常了解的哈希表差不多,比较不同是rehash过程。第四个是set集合,当集合中的元素都为整数时,底层使用的是整数集合,不然也是使用哈希表。最后还有zset,它是一个有序集合,它的有序主要是使用到了跳表,跳表是一个带有层级关系的链表,不同层级所对应的跨度是不一样的,然后通过指针连接起来,当新添加一个节点时,要判断该节点是能到哪一层。然后要找一个数是,就先从索引层数最高的节点找,如果比这个节点大,并且比下一个节点小,那么就找下一个层数的节点,以此类推,当数据量大的时候,时间复杂度是logn。
