0011. Redis 列表(List)
1. 📝 概述
- 了解 redis list 常见命令。
2. 📒 列表
- 列表
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 一个列表最多可以包含
个元素 (4294967295, 每个列表超过 40 亿个元素)。
index
索引- 索引从零开始计数,因此 0 表示第一个元素, 1 表示第二个元素,以此类推。
- 可以使用负索引来指定从列表尾部开始计数的元素,此时 -1 表示最后一个元素, -2 表示倒数第二个元素,依此类推。
3. 📒 常用的 redis list 命令
bash
LPUSH key element [element ...]
# 将一个或多个值插入到列表头部
RPUSH key element [element ...]
# 在列表中添加一个或多个值到列表尾部
LPOP key
# 移出并获取列表的第一个元素
RPOP key
# 移除列表的最后一个元素,返回值为移除的元素。
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
bash
BLPOP key1 [key2 ...] timeout
# 移出并获取列表的第一个元素,如果列表为空则阻塞等待,直到超时或有元素可弹出。
BRPOP key1 [key2 ...] timeout
# 移出并获取列表的最后一个元素,如果列表为空则阻塞等待,直到超时或有元素可弹出。
1
2
3
4
5
2
3
4
5
bash
LRANGE key start stop
# 获取列表指定范围内的元素
LINDEX key index
# 通过索引获取列表中的元素
LREM key count element
# 移除列表中与 value 相等的元素,count 表示移除的个数
# count > 0 :从头部到尾部方向移除等于 element 的元素。
# count < 0 :从尾部到头部方向移除等于 element 的元素。
# count = 0 :移除所有等于 element 的元素。
LTRIM key start stop
# 对列表进行修剪,只保留指定区间内的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
bash
LSET key index value
# 通过索引设置列表元素的值
LINSERT key BEFORE|AFTER pivot value
# 在列表的某个元素前或后插入新元素
RPUSHX key value
# 为已存在的列表添加值到尾部
LPUSHX key value
# 为已存在的列表添加值到头部
RPOPLPUSH source destination
# 移除 source 列表的最后一个元素,并将其添加到 destination 列表头部,返回该元素
BRPOPLPUSH source destination timeout
# 阻塞版本的 RPOPLPUSH,若 source 列表为空则等待,直到超时或有元素可弹出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bash
LLEN key
# 获取列表长度
1
2
2
4. 💻 基础示例
bash
# 插入元素到列表头部
LPUSH mylist "hello"
# (integer) 1
LPUSH mylist "world"
# (integer) 2
# 查看列表范围
LRANGE mylist 0 -1
# 1) "world"
# 2) "hello"
# 弹出第一个元素
LPOP mylist
# "world"
# 查看剩余元素
LRANGE mylist 0 -1
# 1) "hello"
# 插入元素到尾部
RPUSH mylist "redis"
# (integer) 2
# 查看列表
LRANGE mylist 0 -1
# 1) "hello"
# 2) "redis"
# 设置指定索引位置的值
LSET mylist 1 "database"
# OK
# 查看更新后的列表
LRANGE mylist 0 -1
# 1) "hello"
# 2) "database"
# 删除指定值(删除一个 "hello")
LREM mylist 1 "hello"
# (integer) 1
# 查看剩余元素
LRANGE mylist 0 -1
# 1) "database"
# 获取列表长度
LLEN mylist
# (integer) 1
# 阻塞弹出(演示命令,实际执行需在不同客户端操作)
BLPOP anotherlist 10
# 如果 anotherlist 为空,则阻塞最多 10 秒
# 列表修剪:只保留索引 0 到 1 的元素
LTRIM mylist 0 1
# OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57