Redis的列表是一个双链结构,跟java里面的LinkedList一样,对于链表插入数据非常快时间复杂度为O(1),但是查询需要遍历这个链表时间复杂度为O(n),对于双链表来说既可以从头到尾遍历也可以从尾遍历的双向遍历,这个结构有点跟我们的队列和栈非常相似,该结构常用来做异步队列,将需要延后处理的任务结构体序列化成字符串,放入Redis列表,另一个线程从这个列表中轮询进行处理当然,我们的列表也提供这样的操作,下面我们来试试常见的的命令操作。

队列(先进先出)

列表是一个先进先出的数据结构,常用于消息队列和异步逻辑处理,它会确保元素的访问顺序性

>rpush name hello world(integer)2>llen name(integer)2>lpop name"hello">lpop name"world">lpop name(nil)

栈(先进后出)

栈是先进后出的数据结构,跟队列的出顺序相反,我们常见的羽毛球桶

>rpush name hello world(integer)2>rpop name"world">rpop name"hello"

List慢操作

lindex是对整个list进行遍历跟java里面的链表的get(int index)方法一样,根据index获取当前位置的值,随着index值越大性能越差,执行时间效率为O(n)。

ltrim这个命令有两个参数获取一段区间范围列表,ltrim命令会清理这个范围外的元素,我们通过这个命令来获取定长的列表

lrange返回列表中指定区间内的元素,与ltrim不同的是ltrim是直接截取某个区间的数据,lrange是返回某个区间的数据

注意:index参数是可以为负数的,如果为-1那么就获取倒数第一个元素,-2就是倒数第二个元素以此类推,有点像约瑟夫环

如果ltrim name 1 0意味着这个获取的区间没有元素,那么将清空整个列表

>rpush name hello world i am mango(integer)5>lindex name 1"world">lindex name -1"mango">ltrim name 0 1OK>lrange name 0 1"hello""world">ltrim name 1 0OK>llen name(integer)0

快速列表

我们思考一个问题,如果list的结构是一个对象类型,每一个对象保存上一个元素地址和下一个元素地址每块地址都在不同磁盘空间内,每个对象都保留一个指针,在搜索的时候我们势必需要每次来回扫描磁盘,这个开销是非常大的,而且在列表回收的时候整理磁盘碎片会变得非常麻烦,那么咱们可以想象,如果我们的对象是保存在连续空间内,每次查询下一个指针的时候是不是就非常快速找到该元素,不需要来回扫盘,在回收的时候,我们只需要对这块内存标记回收即减少磁盘碎片的整理。

其实redis也是做了这样的优化,在这里我们称之为快速链表(quicklist)的结构,如果列表元素较少的情况下,会使用一个连续的内存存储叫ziplist即压缩列表,当数据量比较大是ziplist会转换成quicklist。Redis将链表和ziplist结合起来组成quicklist,也就是讲ziplist使用双向指针串起来使用,quicklist既满足快速插入删除性能,又不会出现太大的空间冗余。关于list的底层原理在今后的文章中会提出来

一名正在抢救的coder

笔名:mangolove

CSDN地址:https://blog.csdn.net/mango_love

GitHub地址:https://github.com/mangoloveYu

Redis-列表(List)基础相关推荐

  1. 【《Redis深度历险》读书笔记(1)】基础:万丈高楼平地起 ——Redis 5种基础数据结构

    [时间]2021.11.16 [题目][<Redis深度历险>读书笔记(1)]基础:万丈高楼平地起 --Redis 基础数据结构 本栏目是<Redis深度历险:核心原理和应用实践&g ...

  2. Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  3. Redis学习之基础知识普及

    Redis学习之基础知识普及 1. Redis安装(单机) 2.Redis基本数据结构 3.Redis常用命令 3.1.Redis 键(key) 3.2.Redis 字符串(String) 3.3.R ...

  4. python基础知识资料-学习Python列表的基础知识汇总

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

  5. 【Redis】详细基础命令 - 学习笔记

    Redis 环境搭建及运行 安装(Ubuntu举例,其他系统类似) apt-get update && apt-get install redis-server -y 启动 redis ...

  6. Redis 命令--Redis列表(List))

    Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967 ...

  7. vue项目创建,redis列表字典操作,django用redis的第二种方法

    vue项目的创建(路飞前端) -安装node.js -安装vue的脚手架 -创建vue项目,vue create 项目名字在pycharm中开发vue -webstrom,pyacharm,golan ...

  8. Redis学习---(9)Redis 列表(List)

    Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967 ...

  9. redis数据库的基础

    redis数据库 redis有以下三个特点 redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用 redis不仅仅支持简单的key-value类型的数据,同时还提 ...

  10. Redis 列表(List)方法使用详解

    目录 一.简介 二.常用方法 2.1.LPUSH.RPUSH 2.2.LPUSHX.RPUSHX 2.3.LPOP.RPOP 2.4.RPOPLPUSH 2.5.LEN 2.6.LINDEX 2.7. ...

最新文章

  1. 1 用python进行OpenCV实战之用OpenCV3实现图片载入、显示和储存
  2. CNN网络结构发展最全整理
  3. Redis Server Memory Optimization
  4. little problem
  5. notsequence 寒假逆向生涯(9/100)
  6. Android 监听Home键
  7. STM32开发 -- 4G模块开发详解(4)
  8. CentOS 6.5 svn服务器2.0版
  9. vs2013 无法打开 源 文件 SDKDDKVer.h
  10. keil c语言中断怎么写,如何利用keil C实现单片机中断功能
  11. c语言2种软件下载,C语言代码自动整理工具
  12. android开发日历,Android日历开发详解
  13. 下载scikit_learn
  14. python数据集处理一些方法备份(长期更新)
  15. xorl %eax, %eax
  16. P1108 低价购买(DP)
  17. python文件查重并合并_用python对excel查重
  18. Error parsing HTTP request header...java.lang.IllegalArgumentException: Invalid character found in m
  19. print list Reversely
  20. scale与zoom的差异

热门文章

  1. strcpy、strncpy与memcpy的区别与使用方法
  2. HTML5的LocalStorage和sessionStorage的使用 -缓存
  3. Python面向对象基础:编码细节和注意事项
  4. MySQL命令:增删与改
  5. lucene-5.3.1配置(win7x64)
  6. ajax访问遇到Session失效问题
  7. 这4种分析方法,大牛产品经理都在用
  8. 为什么大厂都在造车?原因找到了
  9. 真正零基础Python入门:手把手教你从变量和赋值语句学起
  10. 39个史诗级奇葩代码注释,程序不会崩,但程序员会