Redis——list类型详解

概要

Redis中的list类型相当于双端队列,支持头插,头删,尾插,尾删,并且列表中的内容是可以重复的。

如果搭配使用rpush和lpop,那么就相当于队列
如果搭配使用rpush和rpop,那么就相当于栈
Redis——list类型详解_第1张图片

lpush

向列表中头插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错

当插入多个元素时,是一次头插,例如插入1,2,3,4,那么列表中是4,3,2,1
在这里插入图片描述
演示:
在这里插入图片描述

lrange

查看list指定区间内的元素,前闭后闭,支持负数(-1就相当于倒数第一个元素),下标从0开始,因此查看全部元素就是0,-1
在这里插入图片描述演示:
Redis——list类型详解_第2张图片
展示的元素前面的序号并不是下标,而是结果集专用的序号

需要注意的是,如果我们给的下标超出了list的范围,如果是其他语言,可能就会报错或者抛出异常。但是在Redis中会尽可能的获取对应的内容,这体现了Redis的鲁棒性
Redis——list类型详解_第3张图片

lpushx

从左侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
在这里插入图片描述
演示:
Redis——list类型详解_第4张图片

Rpush

向列表中尾插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错
在这里插入图片描述
演示:
Redis——list类型详解_第5张图片

rpushx

从右侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
在这里插入图片描述
演示:
Redis——list类型详解_第6张图片

lpop

头删list中的元素,返回取出的元素的值。当列表为空则返回nil
在这里插入图片描述
演示:
在这里插入图片描述

rpop

尾删list中的元素,返回取出的元素的值。当列表为空则返回nil
在这里插入图片描述
演示:
在这里插入图片描述

lindex

获取到指定位置的元素,时间复杂度为O(N),如果下标非法则返回nil
在这里插入图片描述

演示:
Redis——list类型详解_第7张图片

linsert

在list的指定处插入元素,如果是before就插入在基准值前面,如果是after就插入到基准值后面,基准值是在list中存在的值而非下标,时间复杂度是O(N)

在这里插入图片描述
演示:
Redis——list类型详解_第8张图片
如果存在多个相同的基准值,那么只插入到第一个基准值处

llen

获取列表的长度,如果key不存在则返回0

在这里插入图片描述

lrem

删除指定的值,count为要删除的个数

count的值 作用
count > 0 从头到尾,删除count个指定的元素
count < 0 删除所有指定的元素
count = 0 从尾到头,删除count个指定的元素

在这里插入图片描述
演示:
Redis——list类型详解_第9张图片

ltrim

保留列表中start和stop之间的元素,删除两边的元素

在这里插入图片描述
演示:
Redis——list类型详解_第10张图片

lset

根据指定的下标,修改元素,如果下标越界,则报错
在这里插入图片描述
演示:
Redis——list类型详解_第11张图片

blpop/brpop

类似于阻塞队列,如果队列为空,尝试出队列,阻塞队列根据阻塞时间产生阻塞,期间Redis可以执行其他命令,直到队列不空,返回元素(如果超时了就返回nil)

命令中可以设置多个key,从左到右遍历key,哪个key的list中不空,则返回元素
在这里插入图片描述
演示:
队列不为空:
Redis——list类型详解_第12张图片
队列为空时:
先设置过期时间是100s
在这里插入图片描述
这边的客户端就阻塞了,启动另一个服务器,往队列里插入元素
在这里插入图片描述
这个服务器插入完元素,上一个服务器就返回元素了
在这里插入图片描述

内部编码

编码方式 细节
ziplist 压缩列表 列表元素个数小于512个同时每个元素的长度小于64字节
linkedlist 俩表 不满足上述条件

上述编码方式是老版本的Redis使用的,新版本的Redis使用了quicklist,相当于链表和压缩列表的结合,整体是一个链表,每个链表的节点是一个压缩链表
Redis——list类型详解_第13张图片

应用场景

作为数组存储多个元素

例如sql中有下面这两张表
Redis——list类型详解_第14张图片
那么在Redis中可以通过以下关联关系进行组织数据
Redis——list类型详解_第15张图片

作为消息队列

Redis——list类型详解_第16张图片
这三个消费者谁先执行brpop命令,谁就可以先拿到新来的元素

你可能感兴趣的:(数据库,redis,redis,list,数据库)