目录

  • 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

redis cluster集群 每个slot可以放多少数据 redis一般list放多少条数据_redis

部分命令使用实例

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)也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。