目录
- List简介
- List的常用操作命令总结
- 部分命令使用实例
- 1.lpush、rpush、lrange
- 2.lpop、rpop
- 3.lindex
- 4.llen
- 5.lrem
- 6.ltrim
- 7.rpoplpush
- 8.lset
- 9.linsert
- 10.blpop
- 性能总结
List简介
List是一个简单的字符串列表,按照插入顺序进行排序,我们可以从List的头部(左边)或者尾部(右边)插入或移除一个元素。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
List的常用操作命令总结
图片来源:https://www.runoob.com/redis/redis-lists.html
部分命令使用实例
1.lpush、rpush、lrange
LPUSH key value1 [value2]
将一个或多个值value插入到列表key的表头,如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头。
LRANGE key start stop
返回列表key中指定区间内的元素,区间以偏移量start和stop指定,下标(index)参数start和stop都以0为底,即0表示列表的第一个元素,1表示列表的第二个元素,以此类推。我们也可以使用负数下标,以-1表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。使用如下:
127.0.0.1:6379> lpush list01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
RPUSH key value1 [value2]
RPUSH与LPUSH的功能相似,不同的是RPUSH的中的value值是按照从右到左的顺序依次插入,使用如下:
127.0.0.1:6379> rpush list02 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
2.lpop、rpop
LPOP key
LPOP用于移除并返回列表key的头元素,如下:
127.0.0.1:6379> lpop list01
"5"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
RPOP key
移除列表key的最后一个元素,返回值为移除的元素。使用如下:
127.0.0.1:6379> rpop list01
"1"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
3.lindex
LINDEX key index
LINDEX命令用于返回列表key中,下标为index的元素,正数下标0表示第一个元素,也可以使用负数下标,-1表示倒数第一个元素,使用如下:
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lindex list01 0
"4"
127.0.0.1:6379> lindex list01 -1
"2"
4.llen
LLEN key
LLEN 用于获取列表key的长度,使用如下:
127.0.0.1:6379> llen list01
(integer) 3
5.lrem
LREM key count value
LREM用于删除列表key中count个value,使用如下:
127.0.0.1:6379> rpush list02 2 2 3 3
(integer) 9
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "2"
7) "2"
8) "3"
9) "3"
127.0.0.1:6379> lrem list02 3 2
(integer) 3
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "3"
3) "4"
4) "5"
5) "3"
6) "3"
如果列表中没有对应的value,返回0,如下:
127.0.0.1:6379> lrem list02 2 0
(integer) 0
6.ltrim
LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。使用如下:
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "3"
3) "4"
4) "5"
5) "3"
6) "3"
127.0.0.1:6379> ltrim list02 0 3
OK
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "3"
3) "4"
4) "5"
7.rpoplpush
RPOPLPUSH source destination
将列表source的最后一个元素作为第一个元素添加到列表destination,使用如下:
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> rpoplpush list02 list01
"5"
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
8.lset
LSET key index value
通过索引index设置列表key的元素的值
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lset list01 3 aa
OK
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "aa"
9.linsert
LINSERT key BEFORE|AFTER pivot value
在列表key的元素pivot前或者后插入元素value,使用如下:
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "aa"
127.0.0.1:6379> linsert list01 before aa 2
(integer) 5
127.0.0.1:6379> linsert list01 after aa 1
(integer) 6
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "aa"
6) "1"
10.blpop
BLPOP key1 [key2 ] timeout
BLPOP是阻塞式列表的弹出原语。它是命令LPOP的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP命令阻塞。当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时,在使用该命令时也需要指定阻塞的时长,时长单位为秒,在该时长内如果没有元素可供弹出,则阻塞结束。返回的结果是key和value的组合。使用如下:
127.0.0.1:6379> rpush k1 v1
(integer) 1
127.0.0.1:6379> blpop k1 10
1) "k1"
2) "v1"
127.0.0.1:6379> blpop k1 10
(nil)
(10.01s)
BRPOP、BPOPLPUSH、BRPOPLPUSH都是相应命令的阻塞版本。
性能总结
List是一个字符串链表,头部(left)、尾部(right)都可以插入或添加;创建List过程中,如果键不存在,则创建新的链表;如果键已存在,就新增内容;如果值全移除,对应的键(List)也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。