跳到主要内容

[toc]

redis数据类型 list 列表

list(列表)简介

简介: 链表(双向链表)

可以存储的值: 列表

操作: 从两端压入或者弹出元素,对单个或者多个元素进行修改,只保留一个范围内的元素

应用场景: 最新消息排行;消息队列

范围:一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

使用示例:

127.0.0.1:6379> LPUSH test a
(integer) 1
127.0.0.1:6379> LPUSH test b
(integer) 2
127.0.0.1:6379> LPUSH test c
(integer) 3
127.0.0.1:6379> LRANGE test 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> LPOP test
"c"

redis列表常用命令

lpush/rpush key value1 [value2]

含义:从左/从右向列表中添加一个或多个值

示例:

lpush 从左边开始插入值,先插入的值在后边

127.0.0.1:6379> LPUSH lst a
(integer) 1
127.0.0.1:6379> LPUSH lst b
(integer) 2
127.0.0.1:6379> LPUSH lst c
(integer) 3
127.0.0.1:6379> LRANGE lst 0 -1
1) "c"
2) "b"
3) "a"

rpush 从右边开始插入值,先插入的值在前边

127.0.0.1:6379> RPUSH l a
(integer) 1
127.0.0.1:6379> RPUSH l b
(integer) 2
127.0.0.1:6379> RPUSH l c
(integer) 3
127.0.0.1:6379> LRANGE l 0 -1
1) "a"
2) "b"
3) "c"

blpop key1 [key2] timeout

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

示例:

127.0.0.1:6379> LPUSH lst a b c
(integer) 3
127.0.0.1:6379> BLPOP lst 3
1) "lst"
2) "c"

brpoplpush source destination timeout

含义:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

示例:

#从列表lst中弹出一个值插入到lst1中,并且返回lst中的这个值
127.0.0.1:6379> BRPOPLPUSH lst lst1 3
"a"

#弹出lst1中的值
127.0.0.1:6379> LPOP lst1
"a"
127.0.0.1:6379> LPOP lst1
(nil)

lindex key index

含义:通过索引获取列表中的元素

示例:

127.0.0.1:6379> LPUSH lst a b c
(integer) 3
127.0.0.1:6379> LINDEX lst 0
"c"

linsert key befor|after pivot value

含义:在列表的元素前或者后插入元素

示例:

#向列表lst中插入3个值,因为是lpush,所以第一个元素是c
127.0.0.1:6379> LPUSH lst a b c
(integer) 3

#在元素c之前插入d
127.0.0.1:6379> LINSERT lst before c d
(integer) 4

#原先c是第一个元素,现在第一个元素是d
127.0.0.1:6379> LINDEX lst 0
"d"

llen key

含义:获取列表长度

示例:

127.0.0.1:6379> LLEN lst
(integer) 4

lpop key

含义:移出并获取列表的第一个元素

示例:

127.0.0.1:6379> RPUSH lst a b c d e f
(integer) 6
127.0.0.1:6379> LPOP lst
"a"

rpop key

含义:移除列表的最后一个元素,返回值为移除的元素

示例:

127.0.0.1:6379> RPUSH lst a b c d e f
(integer) 6
127.0.0.1:6379> RPOP lst
"f"

lpush key value1 [value2]

含义:将一个或多个值插入到列表头部

示例:

127.0.0.1:6379> LPUSH lst aaa bbb
(integer) 5

lpushx key value

含义:将一个值插入到已存在的列表头部

示例:

127.0.0.1:6379> LPUSHX lst 123
(integer) 6

#插入一个不存在的列表,返回值为0
127.0.0.1:6379> LPUSHX lst1 123
(integer) 0

lrange key start stop

含义:获取列表指定范围内的元素,下标从0开始

示例:

127.0.0.1:6379> LRANGE lst 1 3
1) "bbb"
2) "aaa"
3) "c"

127.0.0.1:6379> LRANGE lst 0 3
1) "123"
2) "bbb"
3) "aaa"
4) "c"

lrem key count value

含义:移除列表元素

count的值

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。

示例:

#rpush插入元素,因此元素从左往右为a b c a b c
127.0.0.1:6379> RPUSH lst a b c a b c
(integer) 6

#从表头开始向表尾搜索,移除2个与a相等的元素,所以列表中剩下的元素是b c b c
127.0.0.1:6379> LREM lst 2 a
(integer) 2

127.0.0.1:6379> LRANGE lst 0 -1
1) "b"
2) "c"
3) "b"
4) "c"

lset key index value

含义:通过索引设置列表元素的值

示例:

127.0.0.1:6379> RPUSH lst a b c a b c
(integer) 6
127.0.0.1:6379> LSET lst 0 hehe
OK
127.0.0.1:6379> LRANGE lst 0 -1
1) "hehe"
2) "b"
3) "c"
4) "a"
5) "b"
6) "c"

ltrim key start stop

含义:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

示例:

#插入元素
127.0.0.1:6379> RPUSH lst a b c d e f
(integer) 6

#保留从下标1开始到结尾,即把下标为0的第一个元素删除
127.0.0.1:6379> LTRIM lst 1 -1
OK

#下标为0的元素被删除
127.0.0.1:6379> LRANGE lst 0 -1
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"

RPOPLPUSH source destination

含义:移除列表的最后一个元素,并将该元素添加到另一个列表并返回

示例:

127.0.0.1:6379> RPUSH lst1 aaa
(integer) 1
127.0.0.1:6379> RPUSH lst2 bbb ccc
(integer) 2
127.0.0.1:6379> RPOPLPUSH lst1 lst2
"aaa"

127.0.0.1:6379> LRANGE lst2 0 -1
1) "aaa"
2) "bbb"
3) "ccc"

rpushx key value

含义:为已存在的列表添加值,每次只能添加一个值

示例:

127.0.0.1:6379> RPUSH lst a b c
(integer) 3
127.0.0.1:6379> RPUSHX lst d
(integer) 4
127.0.0.1:6379> LRANGE lst 0 -1
1) "a"
2) "b"
3) "c"
4) "d"