redis列表(list)命令

时间:2022-03-21 19:45:00

redis中list可以插入可以重复的数据,数据呈现顺序排列。

list列表命令

1、blpop命令-移出并获取列表的第一个元素。
redis中blpop用于移出并获取列表的第一个元素,如果列表没有元素会等待到超时或发现可弹出元素为止。如果timeout为0其列表中没数据则会一直等待。
语法:

blpop list1 list2 ... listN timeout

版本:2.2.0及以上
返回值:
如果列表内容为空,返回一个nil。否则返回一个被弹出元素所属的key,第二个是被弹出元素的value。
eg:

127.0.0.1:6379> lpush list 100
(integer) 1
127.0.0.1:6379> blpop list 100
1) "list"
2) "100"
127.0.0.1:6379> blpop list 100
1) "list"
2) "100"
(33.19s)
127.0.0.1:6379> blpop list 1
(nil)
(1.08s)

2、brpop命令-移出并获取列表最后一个元素。
redis中brpop命令用于移出并获取列表的最后一个元素,如果列表中没有元素会阻塞命令直到等待超时,如果timeout设置为0,则如果列表没有返回数据,命令一直阻塞。
语法:

brpop list1 list2 ... listn  timeout

版本:2.0.0及以上
返回值:加入在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。反之,返回一个被弹出的列表名和对应的值。
例子和blpop一致。

3、brpoplpush命令-从一个列表中弹出元素后将弹出的元素插入到另外一个列表
redis中brpoplpush命令从列表中弹出一个值,将弹出元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞命令,直到等待超时或发现可谈出元素为止。
语法:

brpoplpush list1 anotherlist timeout

版本:2.0.0
返回值:如果在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。反之,返回弹出元素的值和等待时长。

4、lindex命令-通过索引获取列表中的元素。
redis中lindex命令用于通过索引获取列表中的元素。也可以使用负数下标,以-1表示最后一个元素,以此类推。
语法:

lindex keyname index

版本:1.0.0
返回值:列表中下标为指定索引值的元素。如果指定索引值不在列表的区间范围内,返回nil。
eg:

redis 127.0.0.1:6379> LPUSH mylist "World"
(integer) 1

redis 127.0.0.1:6379> LPUSH mylist "Hello"
(integer) 2

redis 127.0.0.1:6379> LINDEX mylist 0
"Hello"

redis 127.0.0.1:6379> LINDEX mylist -1
"World"

redis 127.0.0.1:6379> LINDEX mylist 3 # index不在 mylist 的区间范围内
(nil)

5、linsert命令-在列表的元素前或者后面插入新元素
redis中linset命令用于在列表元素前或者后面插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果key不是列表类型,返回一个错误。
语法:

linsert keyname before existingvalue newvalue

版本:1.0.0
返回值:如果命令执行成功,返回插入操作完成后,列表的长度。如果没有找到指定元素,返回-1。如果key不存在或为空列表,返回0。
eg:

redis 127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LINSERT list1 BEFORE "bar" "Yes"
(integer) 3
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "foo"
2) "Yes"
3) "bar"

6、llen命令-获取列表长度
redis中llen命令用于获取列表的长度。如果列表key不存在,则key被解释为一个空列表,返回0。如果key不是列表类型,返回一个错误。
语法

llen keyname

版本:1.0.0及以上
返回值:列表的长度。
eg:

127.0.0.1:6379> llen list
(integer) 0
127.0.0.1:6379> rpush list "foo"
(integer) 1
127.0.0.1:6379> llen list
(integer) 1
127.0.0.1:6379>

7、lpop命令-移出并获取列表的第一个元素
redis中lpop命令用于移除并返回列表的第一个元素。
语法:

llen keyname

版本:1.0.0及以上
返回值:列表的第一个元素。当列表key不存在时,返回nil。
eg:

redis 127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LPOP list1
"foo"

8、lpush命令-将一个或多个值从插入到列表头部
redis中lpush命令将一个或多个值插入到列表头部。如果key不存在,一个空列表会被创建并执行lpush操作。当key存在但不是列表类型时,返回一个错误。
注意:在2。4版本及以前的lpush命令,都只接受单个value值。
语法:

lpush keyname value1 ... valuen

版本:1.0.0及以上
返回值:执行lpush后,列表的长度。
eg:

redis 127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LRANGE list1 0 -1
1) "foo"
2) "bar

9、lpushx命令-将一个或多个值插入到已经存在的列表。
redis中lpushx将一个或多个值插入到已存在的列表头,列表不存在是操作无效。
语法

lpushx keyname value1 value2 ... valuen

版本:2.2.0及以上
返回值:lpush执行后列表的长度。

10、lrange命令-获取列表指定范围内的元素
redis中lrange命令返回列表指定区间的元素,区间以便宜量start和end指定。其中0表示列表的第一个元素。-1表示列表最后一个元素。依次类推。
语法:

lrange keyname start end

版本:1.0.0
返回值:
一个列表,包含指定区间的元素。
eg:

redis 127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LPUSHX list1 "bar"
(integer) 0
redis 127.0.0.1:6379> LRANGE list1 0 -1
1) "foo"
2) "bar"
3) "bar"

11、lrem命令-移除列表元素
redis中lrem根据参数count移除列表终于value相等的元素。
count值可以是以下几种:
大于0:从表头向尾搜索,移除和 value相等的元素,数量为count
小于0:从表尾向头搜索,移除和 value相等的元素,数量为count
等于0:移除表中所有与value相等的值。
语法:

lrem keyname count value

版本:1.0.0
返回值:
被移除元素的数量。列表不存在时返回。
eg:

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LREM mylist -2 "hello"
(integer) 2

12、lset命令-通过索引设置列表元素的值
redis中lset命令通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行lset时,返回一个错误。
语法:

lset keyname index value

版本:1.0.0及以上
返回值:操作成功返回Ok,否则返回错误信息。
eg:

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LSET mylist 0 "bar"
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"

13、ltrim命令-对一个列表进行修剪
redis中ltrim命令对一个列表进行修剪,让列表值保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标为0表示列表的第一个元素,1表示列表的第二个元素。-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
语法:

ltrim keyname start end

版本:1.0.0及以上
返回值:执行命令成功时返回ok
eg:

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
redis 127.0.0.1:6379> LTRIM mylist 1 -1
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

14、rpop命令-移除并获取列表最后一个元素
redis中rpop命令用于移除并返回列表的最后一个元素。
语法:

rpop keyname

版本:1.0.0及以上
返回值:列表的最后一个元素。当列表不存在时,返回nil
eg

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
redis 127.0.0.1:6379> RPOP mylist
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello"
3) "foo"

15、rpoplpush命令-移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
redis中poplpush命令移除列表的最后一个元素,并将该元素添加到另一个列表并返回。是个非阻塞命令。
语法:

rpoplpush sourcekeyname dstkeyname

版本:1.0.0及以上
返回值:被弹出的元素。
eg:

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"

16、rpush命令-在列表中添加一个或者多个值
redis中rpush用于将一个或者多个值插入到类别的尾部。
如果列表不存在,一个空列表会被创建并执行rpush操作。当列表存在但不是列表类型时,返回一个错误。
注意:在redis2.4版本以前rpush命令,都只接受单value值。
语法

rpush keyname value1 ... valuen

版本:1.0.0及以上
返回值:执行rpush操作后,列表的长度。
eg:

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

17、rpushx命令-为已存在的列表添加值
redis中rpushx命令用于将一个或多个值插入到已存在的列表尾部。如果列表不存在,操作无效。
语法

rpushx keyname value1 ... valuen

版本:2.2.0及以上
返回值:执行rpushx操作后,列表的长度。
eg

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSHX mylist2 "bar"
(integer) 0
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"