redis 基本数据类型-列表(List)
2024-08-29 13:43:48
今天不瘦给大家分享一下redis第二个基本数据类型:列表。如果大家了解基本数据结构,相信大家对列表不会陌生,比如在C语言中我们可以使用数组实现一个列表,也可以使用链表实现一个列表(列表链表傻傻分不清楚,列表是一种抽象数据类型,链表为一种实现方式)。
言归正传,那redis是怎么实现列表的呢?答案是:双端双向无环链表(原谅我给起了一个这么复杂的名字,也有人直接叫双端链表), 借用《redis设计与实现》中一图
为什么这样设计呢?主要有如下优点:
- 双向:获取前置节点和后置节点的时间复杂度都为O(1)
- 首尾两个指针:从头和尾取元素时间复杂度都为O(1),从redis同时提供列表两端的操作命令也得到了印证(lpop和rpop等)
- 无环: 有环链表会导致某些操作变复杂,且应用场景有局限性
- 长度计数器:使获取列表长度的时间复杂度为O(1),又是以空间换时间思想的体现
注意事项:
一个列表最多可以包含 232 - 1 个元素
redis列表定义为字符换列表,但是基于的双端双向循环列表并没有限定每个节点value的类型
参考:
《Redis设计与实现》
https://redis.io/topics/data-types
这里是老瘦家的儿子,如需转载请声明,我替老瘦感谢你。
最新文章
- java多线程--几个多线程面试题小结
- php工作笔记8-并发和数据类型
- 更新整理本人所有博文中提供的代码与工具(C++,2013.10)
- 几个CSS3动画
- Win10 利用安装盘启用 .NET Framework 3.5
- HDU 3555 Bomb
- window.document
- Extjs4.2——bbar的默认类型(xtype)
- php重定向跳转
- spring boot框架eclipse快速搭建
- Lvs工作原理
- Ant部署(linux)
- 《天书夜读:从汇编语言到windows内核编程》一 汇编指令与C语言
- 通过Activity动态加载Fragment创建主界面构架
- Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证
- 打印word文档时遇到标记区如何取消
- $q的基本用法
- phpstorm 一个窗口打开多个项目
- ios-Objective-C中的各种遍历(迭代)方式(转载)
- Error: Target id is not valid ABIs: no ABIs 解决方法