5.redis 数据类型之list列表

redis 数据类型之list列表

列表简介

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

列表操作命令

lpush

LPUSH key value1[value2]

lpush 即 left push. 将一个或多个值value插入到列表key的表头,如果有多个value值。那么各个value值按从左到右的顺序依次插入到表头。如下:

1
2
127.0.0.1:6379> lpush name shangsan lisi wangwu
(integer) 3

返回的是列表元素的个数。

lpushx

LPUSHX key value

Redis Lpushx 将一个值插入到已存在的列表头部,列表不存在时操作无效。

lrange

LRANGE key start stop

返回列表key中指定区间内的元素,区间以偏移量start 和 stop指定。下标(index)参数start和stop都以0为底,即0 表示的第一个元素,1表示列表的第二元素。依次类推。我们也可以使用负数下标,以-1表示列表的最后一个元素,-2 表示列表的倒数第二个元素,依次类推。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> lpush name shangsan lisi wangwu
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "shangsan"
127.0.0.1:6379> lrange name 0 -2
1) "wangwu"
2) "lisi"
127.0.0.1:6379> lrange name 0 2
1) "wangwu"
2) "lisi"
3) "shangsan"

rpush

RPUSH key value1 [value2]

rpush即 right push. rpush与lpush的功能一致,不同的是rpush的中的value值是按照从右到左的顺序依次插入。如下:

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> rpush name tom peter john
(integer) 6
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "shangsan"
4) "tom"
5) "peter"
6) "john"

rpushx

RPUSHX key value

Redis Rpushx 命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

rpop

rpop 即 right pop. rpop命令可以移除并返回列表key的尾元素。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "shangsan"
4) "tom"
5) "peter"
6) "john"
127.0.0.1:6379> rpop name
"john"
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "shangsan"
4) "tom"
5) "peter"

lpop

lpop 和 rpop类似。不同的是lpop移除并返回列表key的头元素。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "shangsan"
4) "tom"
5) "peter"
127.0.0.1:6379>
127.0.0.1:6379> lpop name
"wangwu"
127.0.0.1:6379> lrange name 0 -1
1) "lisi"
2) "shangsan"
3) "tom"
4) "peter"

lindex

lindex命令可以返回列表key中,下标为index的元素。正数下标0表示第一个元素,也可以使用负数下标。-1 表示倒数第一个元素,如下:

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> lrange name 0 -1
1) "lisi"
2) "shangsan"
3) "tom"
4) "peter"
127.0.0.1:6379> lindex name 0
"lisi"
127.0.0.1:6379> lindex name -1
"peter"
127.0.0.1:6379> lindex name -2
"tom"

ltrim

LTRIM key start stop

ltrim 命令可以对一个列表进行修剪,即让列表只保留指定区间内的元素。不在指定区间之内的元素都将被删除。下标与之前介绍的写法都一致。如下:

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> ltrim name 0 1
OK
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"

llen

llen 获取列表的长度

1
2
3
4
127.0.0.1:6379> lpush name zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379> llen name
(integer) 3

lset

通过索引设置列表的值

1
2
3
4
5
6
7
127.0.0.1:6379> lpush name zhangsan lisi wangwu
127.0.0.1:6379> lset name 1 ooyhao
OK
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "ooyhao"
3) "zhangsan"

blpop

BLPOP key1 [key2] timeout

说明:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止.

blpop 是阻塞式列表的弹出原语。它是命令lpop的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被blpop命令阻塞。当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时,在使用该命令时也需要指定阻塞的时长,时长单位为秒,在该时长内如果没有元素可供弹出,则阻塞结束。返回的结果是 key 和 value 的组合,如下:

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> blpop name 10
1) "name"
2) "wangwu"
127.0.0.1:6379> blpop name 10
1) "name"
2) "lisi"
127.0.0.1:6379> blpop name 10
(nil)
(10.06s)

最后,brpop, bpoplpush, brpoplpush 都是相应命令的阻塞版本。

更加详细的文档可以查看:https://www.runoob.com/redis/redis-lists.html 或官网

本文部分参考自:http://www.javaboy.org/2019/0615/redis-list-set.html

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×