1.BLPOP
语法:BLPOP key [key ...]
timeout
说明:该操作的时间复杂度为O(1)。BLPOP是一个阻塞形式的列表POP操作原语。它是LPOP命令的阻塞版本,因为在指定的列表中如果没有元素来弹出,该命令将会阻塞连接。当存储在key上的列表非空时,POP操作将会从列表的首部弹出一个元素。
非阻塞行为:
当调用BLPOP时,如果在指定的keys中至少有一个存储有非空的列表,那么将会从该列表的首部弹出一个元素,并且返回给用户该key和相应的值。在执行操作时将会按照给定的顺序检查指定的keys。假如存在三个keys,分别为list1、list2和list3,list1相应的列表实际上并不存在,而list2和list3上存储有非空的列表。如以下命令:
BLPOP
list1 list2
list3
BLPOP将会确保从list2的首部返回一个元素。
阻塞行为:
如果在指定的keys中没有一个包含非空的列表,那么BLPOP将会阻塞连接,直到另外一个客户端对其中的一个列表执行了一个LPUSH或者RPUSH操作。
一旦新的数据出现在列表中,客户端将会返回接触阻塞的key的名称和弹出的值。当BLPOP命令引起一个客户端阻塞并且用户指定了非零的超期时间时,客户端在超过超期时间后将会解除阻塞并且返回一个nil值。timeout参数被解析为一个整型值。一个为0的超期时间用于表示无限期阻塞。
多个客户端阻塞在相同的keys上
多个客户端能够阻塞在相同的key上。它们将会被放入一个队列,并且会按照先来先服务的原则来执行操作。
位于MULTI/EXEC事务中的BLPOP命令
BLPOP可以与管道线(pipelining)结合使用,但是却不适应应用在MULTI/EXEC块中使用BLPOP命令。这将会阻塞整个服务器以便能够原子性地执行该块,在这种情况下另外的客户端无法执行push操作。位于MULTI/EXEC块中的BLPOP的行为是返回一个nil响应。就像超出超时时间的情况一样。
返回值:如果没有元素可以弹出并且超出超时时间,那么返回值为nil;在正常情况下将会返回由两个元素组成的块,其中第一个元素为指定的key,第二个元素为弹出的值。
该命令自1.3.1版本后可用。
2.BRPOP
语法:BRPOP
key [key ...]
timeout
说明:该操作的时间复杂度为O(1)。BRPOP是一个阻塞形式的列表弹出原语。它是RPOP命令的阻塞版本,因为在指定的列表中如果没有元素存在,那么它将会阻塞连接。操作将会按照指定的顺序检查列表,并从第一个非空列表的尾部弹出一个元素。BRPOP操作大致与BLPOP元素相同,但是BRPOP命令从列表的尾部弹出元素。
返回值:如果没有元素弹出并且超时,那么返回值为nil;在正常情况下将会返回由两个元素组成的块,其中第一个元素为指定的key,而第二个元素为弹出的值。
该命令自1.3.1版本后可用。
3.BRPOPLPUSH
语法:BRPOPLPUSH source destination
timeout
说明:该操作的时间复杂度为O(1)。BRPOPLPUSH命令式RPOPLPUSH操作的阻塞版本。当source包含元素时,命令的行为同RPOPLPUSH命令一致。当source为空时,Redis将会阻塞连接,直到另外一个客户端对source执行了一个push操作或者超出超时时间。一个为零的超时时间将会无限期阻塞。
返回值:在正常情况下会返回从source弹出并且压入destination中的元素。如果超出超期时间,将会返回一个null响应。
该命令自2.1.7版本后可用。
4.LINDEX
语法:LINDEX
key
index
说明:该操作的时间复杂度为O(N),此处N是为得到位于index处得元素将要遍历的元素的个数。如果是得到列表中第一个或者最后一个元素,那么时间复杂度为O(1)。
该操作将会返回存储在key上的列表中位于index处得元素。index的值从0开始,因此0意味着首元素,1表示列表中的第二个元素。如果index值为负,那么将会从列表的尾部进行遍历。此处,-1代表最后一个元素,-2代表倒数第二个元素,以此类推。当存储在key上的值不是列表时,将会返回错误。
返回值:返回请求的元素,如果index超出范围,那么返回值将为nil。
该命令自0.07版本后可用。
5.LINSERT
语法:LINSERT
key BEFORE|AFTER pivot
value
说明:该操作的时间复杂度为O(N),此处N为在找到枢轴pivot前需要遍历的元素个数。这意味着将元素插入到列表左端的时间复杂度可以认为为O(1);而插入右端的时间复杂度为O(N)。插入存储在key上的列表的值可以位于pivot的左侧或者右侧。如果指定的key不存在时,那么它将会被认作一个空列表,并不执行任何操作。如果指定的key存在,但是所持有的值不是列表时,将会返回一个错误。
返回值:该操作将会返回插入操作完成后的列表的长度,如果枢轴没有找到,那么将会返回-1。
该命令自2.1.1版本后可用。
6.LLEN
语法:LLEN
key
说明:该操作的时间复杂度为O(1)。返回存储在key上的列表的长度。如果key不存在,那么将会被认作一个空列表,并且返回者为0。如果存储在key上的值不是列表,那么将会返回一个错误。
返回值:存储在key上的列表的长度。
该命令自0.07版本后可用。
7.LPOP
语法:LPOP
key
说明:该操作的时间复杂度为O(1)。移除并返回存储在key上的列表的首元素。
返回值:列表的首元素,如果指定的key不存在,那么返回值为nil。
该命令自0.07版本后可用。
8.LPUSH
语法:LPUSH
key
value
说明:该操作的时间复杂度为O(1)。在存储在key上的列表的首部插入一个元素。如果指定的key不存在,那么该命令在正式执行前将会创建一个空列表。如果key对应的值不是列表类型,那么将会返回一个错误。
返回值:返回插入操作完成后列表的长度。
该命令自0.07版本后可用。
9.LPUSHX
语法:LPUSHX
key
value
说明:该操作的时间复杂度为O(1)。如果指定的key存在,并且对应的值为列表类型时,那么在该列表的首部插入一个元素。与LPUSH相反,如果key不存在,那么将不会进行任何操作。
返回值:操作执行完成后列表的长度。
该命令自2.1.1版本后可用。
10.LRANGE
语法:LRANGE
key start
stop
说明:该操作的时间复杂度为O(S+N),此处S为开始元素的偏移,而N为指定区间的元素的个数。返回存储在key上的指定元素。开始元素的偏移值和stop的索引值均是以0开始,并且0代表列表中的第一个元素,而1代表第二个元素,以此类推。
偏移值可以是负值,表示从列表的尾部开始。例如,-1代表列表的最后一个元素,而-2代表列表中的倒数第二个元素。需要注意的是:如果有一个列表,元素编号为从0到100,那么LRANGE
list 0
10将会返回11个元素,也就是说,该操作会包含列表中最后端的元素。
索引越界:越界索引将不会引发错误。如果开始值超出列表的范围,或者start的值大于end的值,那么将会返回一个空列表。如果end超出列表的范围,那么Redis将会将其作为列表中的最后一个元素对待。
返回值:返回指定区域中的元素的列表。
该命令自0.07版本后可用。
11.LREM
语法:LREM
key count
value
说明:该命令的时间复杂度为O(N),此处N为列表的长度。在key对应的列表中删除前count个其值为value的元素。count的值会按照如下方式来影响操作:
(1)count
> 0:从列表首部开始移除其值为value的count个元素
(2)count <
0:从列表尾部开始移除其值为value的|count|个元素
(3)count =
0:移除所有其值为value的元素
需要注意的是:不存在的key会被当作空列表存在。因此,如果key不存在,那么该命令将会始终返回0。
返回值:返回移除的元素的个数。
该命令自0.07版本后可用。
12.LSET
语法:LSET
key index
value
说明:时间复杂度为O(N),此处N为列表的长度。设置列表中第一个或者最后一个元素的时间复杂度为O(1)。将列表中index处的值设置为value。如果index超出列表的返回,那么发生错误。
返回值:状态码。
该命令自0.07版本后可用。
13.LTRIM
语法:LTRIM
key start
stop
说明:该操作的时间复杂度为O(N),此处N为操作将要移除的元素的个数。对一个已经存在列表进行LTRIM操作将会使得列表仅仅包含指定区间中的元素。start和stop的索引值均是以0开始的,这里0表示列表中的第一个元素,1表示第二个元素,以此类推。start和stop可以是负值,这意味着从偏移值是从列表的尾部开始,这里-1表示列表中的最后一个元素,而-2表示倒数第二个元素,以此类推。超出界限的索引值并不会产生错误:如果start的值超出列表的范围,或者start
>
end,那么将会返回一个空列表。如果end超出列表的界限,那么Redis将会将其视作列表的最后一个元素。
返回值:状态码。
该命令自0.07版本后可用。
14.RPOP
语法:RPOP
key
说明:该操作的时间复杂度为O(1)。移除并返回存储在key上的列表中的最后一个元素。
返回值:最后一个元素的值,如果key不存在,那么返回值为nil。
该命令自0.07版本后可用。
15.RPOPLPUSH
语法:RPOPLPUSH
source
destination
说明:该操作的时间复杂度为O(1)。原子性地返回并移除存储在source列表中的最后一个元素,并将其压入由destination指定的列表中。如果source不存在,那么将不会进行任何操作,并且返回值为nil。如果source和destination相同,操作等同于将列表的最后一个元素移至列表的首部。因此,可以将该命令看作是列表的轮转操作。
返回值:弹出/压入的元素。
该命令自1.1版本后可用。
16.RPUSH
语法:RPUSH
key
value
说明:该操作的时间复杂度为O(1)。将元素插入存储在key上的列表的尾部。如果key不存在,那么在执行操作之前会创建一个空列表。如果key对应的值不是列表,那么将会发生错误。
返回值:返回操作完成后列表的长度。
该命令自0.07版本后可用。
17.RPUSHX
语法:RPUSHX
key
value
说明:该操作的时间复杂度为O(1)。如果key存在并且其值为列表,那么将value插入该列表的尾部。如果key不存在,那么将不进行任何操作。
返回值:返回操作完成后列表的长度。
该命令自2.1.1版本后可用。