2026-10-29 16:00:22
List是Redis的基础数据类型之一,类似于Java中的LinkedList。列表最多包含2^32个元素,常用于模拟队列操作。下面是List相关命令的详细介绍:
BLPOP
最早版本:2.0.0
时间复杂度:O(1)
用法:BLPOP是LPOP的阻塞版本。当列表无元素可弹出时,连接将被阻塞。当给定多个key,会按参数key的顺序检查各个列表,弹出第一个非空列表的头元素。timeout表示阻塞的最大秒数,timeout为0表示无限阻塞。
当多个元素同时push进一个list时,阻塞的BLPOP命令会弹出哪个元素?在Redis2.4和2.6版本处理方法不同。客户端A阻塞等待,此时客户端B执行push操作。在Redis2.6之后,客户端A会返回c;在Redis2.4版本中,客户端A接收到第一个元素a。
若需等待Set新元素并阻塞队列,可使用BLPOP。伪代码示例如下:
消费者:生产者:
BRPOP
最早版本:2.0.0
时间复杂度:O(1)
BRPOP与BLPOP基本相同,不同之处在于它从尾部弹出元素。
BRPOPLPUSH
最早版本:2.2.0
时间复杂度:O(1)
它是RPOPLPUSH的阻塞版本。当source包含元素时,它与RPOPLPUSH表现相同;当source为空时,Redis会被阻塞,直到另一个客户端push元素或达到timeout时间限制。
LINDEX
最早版本:1.0.0
时间复杂度:O(N),N为找到目标元素所跨越元素的个数。当index为0或-1时,时间复杂度为O(1)。用法:返回列表中指定位置的元素。index从0开始,-1表示倒数第一个元素,-2表示倒数第二个元素等。
LINSERT
最早版本:2.2.0
时间复杂度:O(N),N为在找到基准value前所跨越的元素个数。用法:将value插入到基准值pivot的前面或后面。如果key不存在,则视为空列表。命令返回插入操作后的list长度,若找不到基准值pivot,返回-1。
LLEN
最早版本:1.0.0
时间复杂度:O(1)
返回指定key的list长度。如果key不存在,则视为空列表,返回0。如果key非list类型,会报错。
LPOP
最早版本:1.0.0
时间复杂度:O(1)
删除并返回list的第一个元素。如果key不存在,返回nil。
LPUSH
最早版本:1.0.0
时间复杂度:O(1)
将所有指定的value插入列表头部。如果key不存在,则创建空list并进行插入。如果key非list类型,会报错。一次可插入多个元素,顺序从左到右。
LPUSHX
最早版本:2.2.0
时间复杂度:O(1)
当key存在时,在头部插入指定元素。若key不存在,则不进行操作。
LRANGE
最早版本:1.0.0
时间复杂度:O(S+N),S为start元素的偏移量,N为指定范围的元素个数。用法:返回指定key的指定范围元素。start和stop为下标(从0开始),可以是负数。结果包含下标为stop的元素。start或stop超出范围返回空列表。
LREM
最早版本:1.0.0
时间复杂度:O(1)
移除list中前count次出现的value。key不存在视为空列表,返回0。
LSET
最早版本:1.0.0
时间复杂度:O(N),N为list的长度。用法:设置指定下标的value。下标超出范围会报错。
LTRIM
最早版本:1.0.0
时间复杂度:O(N),N为删除的元素个数。用法:修剪已存在的list,修剪后的list只包含指定范围的元素。start和stop为从0开始的索引。start和stop可以是负数。若超出范围,不会报错,根据实际参数处理。
RPOP
最早版本:1.0.0
时间复杂度:O(1)
删除并返回list的最后一个元素。key不存在返回nil。
RPOPLPUSH
最早版本:1.2.0
时间复杂度:O(1)
原子性地返回并删除source的最后一个元素,并将该元素存储到destination的第一个元素位置。例如,source保存a、b、c,destination保存x、y、z,执行后,source保存a、b,destination保存c、x、y、z。返回被移出和存入destination的元素。
RPUSH
最早版本:1.0.0
时间复杂度:O(1)
将指定元素插入到指定key的尾部。key不存在则创建空list。key非list类型会报错。在2.4版本之后,可一次插入多个值,顺序从左到右。
RPUSHX
最早版本:2.2.0
时间复杂度:O(1)
若key不存在,则不会进行任何操作,与RPUSH不同。