redis 基本数据类型-列表(List)

今天不瘦给你们分享一下redis第二个基本数据类型:列表。若是你们了解基本数据结构,相信你们对列表不会陌生,好比在C语言中咱们能够使用数组实现一个列表,也能够使用链表实现一个列表(列表链表傻傻分不清楚,列表是一种抽象数据类型,链表为一种实现方式)。redis

言归正传,那redis是怎么实现列表的呢?答案是:双端双向无环链表(原谅我给起了一个这么复杂的名字,也有人直接叫双端链表)借用《redis设计与实现》中一图数组

 

为何这样设计呢?主要有以下优势:数据结构

  • 双向:获取前置节点和后置节点的时间复杂度都为O(1)
  • 首尾两个指针:从头和尾取元素时间复杂度都为O(1),从redis同时提供列表两端的操做命令也获得了印证(lpop和rpop等)
  • 无环: 有环链表会致使某些操做变复杂,且应用场景有局限性
  • 长度计数器:使获取列表长度的时间复杂度为O(1),又是以空间换时间思想的体现

 

注意事项:设计

一个列表最多能够包含 232 - 1 个元素3d

redis列表定义为字符换列表,可是基于的双端双向循环列表并无限定每一个节点value的类型指针

 

参考:blog

《Redis设计与实现》 get

https://redis.io/topics/data-typesio

 

这里是老瘦家的儿子,如需转载请声明,我替老瘦感谢你。循环

相关文章
相关标签/搜索