Redis系列-数据类型-列表(List)

本文详细介绍了列表(List)的基本概念,包括列表的组成结构、索引原理,以及如何通过各种命令实现列表项的添加、删除和查询等功能。具体涉及LPUSH、RPUSH、LPOP、RPOP等常用操作命令及其复杂度分析。

列表(List)

    一个列表可以包含一个或多个以上数量的项,每个项按照它们被推入到列表的位置来排列.每个列表项所处的位置决定了这个项的索引(index),索引以 0 为开始,从列表的左端到右端依次 递增,位于列表最左端(表 头)的项的索引为 0 ,而位于列表最右端(表尾)的 项的索引为 N-1 ,其中 N 为列表的长度。

    列表包含的项可以出现重复,它们不必是唯一的.

指令

1.从列表的左端推入值

LPUSH key value [value ...]

将一个或以上数量的值依次推入到列表的左端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。


2.从列表的右端推入值

RPUSH key value [value ...]

将一个或以上数量的值依次推入到列表的右端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。


操作流程图


3.从列表的两端弹出项

命令作用复杂度
LPOP KEY移除并返回列表最左端的 项O(1)
RPOP KEY移除并返回列表最右端的 项。O(1)


4.获取列表的长度


5.获取列表给定索引上的项


6.获取给定索引范围之内的所以项


7.设置指定索引上的列表项


8.在指定位置插入列表项


9.从列表中删除指定的值

LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的列表项:
• 如果 count > 0 ,那么从表头开始向表尾搜索,移除最多 count 个值为 value 的列表项。
• 如果 count < 0 ,那么从表尾开始向表 头搜索,移除最多 abs(count) 个值为 value 的列表项。
• 如果 count = 0 ,那么移除列表中所有 值为 value 的列表项。

10.修剪列表

LTRIM key start stop
对一个列表进行修剪(trim),让列表只保留指定索引范 围内的列表项,而将不在范围内的其他列表项全部删除。两个索引都可以是正数或者负数。
命令执行成功时返回 OK ,复杂度为 O(N) ,N 为被移除列表项的数量

11.阻塞式弹出操作

阻塞弹出命令
命令作用
BLPOP key [key ...] timeout

LPOP 命令的阻塞版本;

命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最左端的项;

如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止;

设置 timeout 参数为 0 表示永远阻塞。

BRPOP key [key ...] timeout

RPOP 命令的阻塞版本:

命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最右端的项;

如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止;

设置 timeout 参数为 0 表示永远阻塞。

BLPOP/BRPOP的先到先服务原则

    如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器就会按照先到先服务原则,优先向最早被阻塞的客户端返回新值。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值