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

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

为什么这样设计呢?主要有如下优点:

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

注意事项:

一个列表最多可以包含 232 - 1 个元素

redis列表定义为字符换列表,但是基于的双端双向循环列表并没有限定每个节点value的类型

参考:

《Redis设计与实现》

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

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

最新文章

  1. java多线程--几个多线程面试题小结
  2. php工作笔记8-并发和数据类型
  3. 更新整理本人所有博文中提供的代码与工具(C++,2013.10)
  4. 几个CSS3动画
  5. Win10 利用安装盘启用 .NET Framework 3.5
  6. HDU 3555 Bomb
  7. window.document
  8. Extjs4.2——bbar的默认类型(xtype)
  9. php重定向跳转
  10. spring boot框架eclipse快速搭建
  11. Lvs工作原理
  12. Ant部署(linux)
  13. 《天书夜读:从汇编语言到windows内核编程》一 汇编指令与C语言
  14. 通过Activity动态加载Fragment创建主界面构架
  15. Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证
  16. 打印word文档时遇到标记区如何取消
  17. $q的基本用法
  18. phpstorm 一个窗口打开多个项目
  19. ios-Objective-C中的各种遍历(迭代)方式(转载)
  20. Error: Target id is not valid ABIs: no ABIs 解决方法

热门文章

  1. css文字飞入效果
  2. 从CVE-2018-1273看漏洞分析
  3. 如何使用 adb 命令实现自动化测试
  4. vmware centos 安装
  5. git下配置github sshkey
  6. npm用法及离线安装方法
  7. SQLSERVER数据库备份操作和还原操作做了什么
  8. ASP.NET MVC使用AuthenticationAttribute验证登录
  9. AFNetworking2.0简易GET,POST请求封装以及使用
  10. Docker 命令总结