# List命令
# BLMOVE
# 语法
BLMOVE source destination <LEFT | RIGHT> <LEFT | RIGHT> timeout
# 描述
BLMOVE 是 LMOVE 的阻塞版本。当源列表中包含元素时,这个命令的行为与 LMOVE 完全相同
# 参数
- key
键名
- destination
目标列表的键
- LEFT | RIGHT
从源列表的哪一端弹出元素:LEFT(头部)或 RIGHT(尾部)
- timeout
最大阻塞时间,单位为秒。如果超时时间设置为 0,则表示无限期阻塞
# BLMPOP
# 语法
BLMPOP timeout numkeys key [key ...] <LEFT | RIGHT> [COUNT count]
# 描述
只要有任何一个列表中包含元素,这个命令的行为就与 LMPOP 完全相同。当在 MULTI/EXEC 事务块或 Lua 脚本中使用时,它的行为也与 LMPOP 完全相同
# 参数
- key
键名
- numkey
后面跟随的键的数量
- timeout
最大阻塞时间,单位为秒。如果超时时间设置为 0,则表示无限期阻塞
- COUNT
要弹出的元素数量。默认值为 1
- LEFT | RIGHT
从源列表的哪一端弹出元素:LEFT(头部)或 RIGHT(尾部)
# BLPOP
# 语法
BLPOP key [key ...] timeout
# 描述
BLPOP 是一个阻塞式列表弹出的基础命令。当给定的所有列表里都没有元素可以弹出时,它会直接阻塞当前的连接
# 参数
- key
键名
- timeout
最大阻塞时间,单位为秒。如果超时时间设置为 0,则表示无限期阻塞
# 示例
> DEL list1 list2
(integer) 0
> RPUSH list1 a b c
(integer) 3
> BLPOP list1 list2 0
1) "list1"
2) "a"
BLPOP list1 list2 list3 0
# BRPOP
# 语法
BRPOP key [key ...] timeout
# 描述
BRPOP 是一个阻塞式列表弹出的基础命令。它是 RPOP 的阻塞版本:当给定的所有列表里都没有元素可以弹出时,它会直接阻塞当前的连接
# 参数
- key
键名
- timeout
最大阻塞时间,单位为秒。如果超时时间设置为 0,则表示无限期阻塞
# 示例
> DEL list1 list2
(integer) 0
> RPUSH list1 a b c
(integer) 3
> BRPOP list1 list2 0
1) "list1"
2) "c"
# BRPOPLPUSH
# 语法
BRPOPLPUSH source destination timeout
# 描述
当源列表里有元素时,它的行为和 RPOPLPUSH 完全一样;如果在 MULTI/EXEC 事务块或 Lua 脚本里使用,行为也完全相同
# 参数
- destination
目标列表的键
- timeout
最大阻塞时间,单位为秒。如果超时时间设置为 0,则表示无限期阻塞
- source
来源列表的关键字
# LINDEX
# 语法
LINDEX key index
# 描述
返回存储在指定键(key)的列表中,位于指定索引(index)位置的元素。索引是从 0 开始计算的,所以 0 代表第一个元素,1 代表第二个元素,依此类推。也可以使用负数索引来指定从列表尾部开始计算的元素
# 参数
- key
键名
- index
要返回的元素的从零开始的索引。负数索引从尾部开始计算
# 示例
> LPUSH mylist "World"
(integer) 1
> LPUSH mylist "Hello"
(integer) 2
> LINDEX mylist 0
"Hello"
> LINDEX mylist -1
"World"
> LINDEX mylist 3
(nil)
# LINSERT
# 语法
LINSERT key <BEFORE | AFTER> pivot element
# 描述
在键所对应的列表中,于参考值的前面或后面插入一个元素
# 参数
- BEFORE | AFTER
决定将元素插入到基准值的前面还是后面
- pivot
要相对于哪个现有元素进行插入
- element
待插入的值
- key
键名
# 示例
> RPUSH mylist "Hello"
(integer) 1
> RPUSH mylist "World"
(integer) 2
> LINSERT mylist BEFORE "World" "There"
(integer) 3
> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
# LLEN
# 语法
LLEN key
# 描述
返回存储在指定键(key)处的列表长度。如果该键不存在,则将其视为空列表并返回 0。如果该键存储的值不是列表类型,则会返回一个错误
# 参数
- key
键名
# 示例
> LPUSH mylist "World"
(integer) 1
> LPUSH mylist "Hello"
(integer) 2
> LLEN mylist
(integer) 2
> LPUSH mylist "World"
(integer) 1
> LPUSH mylist "Hello"
(integer) 2
> LLEN mylist
(integer) 2
# LMOVE
# 语法
LMOVE source destination <LEFT | RIGHT> <LEFT | RIGHT>
# 描述
以原子方式从 source 列表的头部或尾部弹出并移除第一个/最后一个元素,然后将其推入 destination 列表的头部或尾部参数决定
# 参数
- source
来源列表的关键字
- LEFT | RIGHT
从源列表的哪一端弹出元素:LEFT(头部)或 RIGHT(尾部)
# 示例
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> LMOVE mylist myotherlist RIGHT LEFT
"three"
> LMOVE mylist myotherlist LEFT RIGHT
"one"
> LRANGE mylist 0 -1
1) "two"
# LMPOP
# 语法
LMPOP numkeys key [key ...] <LEFT | RIGHT> [COUNT count]
# 描述
系统会根据传入的参数,从第一个非空列表的左侧或右侧弹出元素。返回的元素数量受限于非空列表的长度与 count 参数两者中的较小值
# 参数
- key
键名
- numkey
后面跟随的键的数量
- LEFT | RIGHT
从源列表的哪一端弹出元素:LEFT(头部)或 RIGHT(尾部)
- COUNT
要弹出的元素数量。默认值为 1
# 示例
> LMPOP 2 non1 non2 LEFT COUNT 10
(nil)
> LPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> LMPOP 1 mylist LEFT
1) "mylist"
2) 1) "five"
> LRANGE mylist 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
> LMPOP 1 mylist RIGHT COUNT 10
1) "mylist"
2) 1) "one"
2) "two"
3) "three"
4) "four"
> LPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> LPUSH mylist2 "a" "b" "c" "d" "e"
(integer) 5
> LMPOP 2 mylist mylist2 right count 3
1) "mylist"
2) 1) "one"
2) "two"
3) "three"
> LRANGE mylist 0 -1
1) "five"
2) "four"
> LMPOP 2 mylist mylist2 right count 5
1) "mylist"
2) 1) "four"
2) "five"
> LMPOP 2 mylist mylist2 right count 10
1) "mylist2"
2) 1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
> EXISTS mylist mylist2
(integer) 0
# LPOP
# 语法
LPOP key [count]
# 描述
移除并返回指定 key 中存储的列表的第一个(或前几个)元素
# 参数
- COUNT
要弹出的元素数量。默认值为 1
- key
键名
# 示例
> RPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> LPOP mylist
"one"
> LPOP mylist 2
1) "two"
2) "three"
> LRANGE mylist 0 -1
1) "four"
2) "five"
> RPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> LPOP mylist
"one"
> LPOP mylist 2
1) "two"
2) "three"
> LRANGE mylist 0 -1
1) "four"
2) "five"
# LPOS
# 语法
LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]
# 描述
该命令会返回 Redis 列表中匹配元素的索引。在默认情况下(即不提供任何选项时),它会从列表的头部向尾部进行扫描,寻找第一个匹配的元素。如果找到了该元素,则返回其索引(即在列表中从 0 开始计算的位置);如果未找到匹配项,则返回 nil
# 参数
- key
键名
- RANK
要返回的第几个匹配项:1 表示从列表头部算起的第一个匹配项,-1 表示从列表尾部算起的第一个匹配项
- COUNT num-matches
要返回的匹配项数量。如果设置为 0,则返回所有匹配项
- index
要返回的元素的从零开始的索引。负数索引从尾部开始计算
- MAXLEN len
最多比较 len 个元素。如果设置为 0(默认值),则会扫描整个列表
# 示例
> RPUSH mylist a b c 1 2 3 c c
> LPOS mylist c RANK 2
6
> LPOS mylist c RANK -1
7
> LPOS mylist c COUNT 2
[2,6]
> LPOS mylist c RANK -1 COUNT 2
[7,6]
> LPOS mylist c COUNT 0
[2,6,7]
# LPUSH
# 语法
LPUSH key element [element ...]
# 描述
将指定的所有值插入到 key 对应列表的头部。如果 key 不存在,则在执行插入操作前,会先创建一个空列表。如果 key 对应的值不是列表类型,则会返回错误
# 参数
- key
键名
- element
待插入的值
# 示例
> LPUSH mylist "world"
(integer) 1
> LPUSH mylist "hello"
(integer) 2
> LRANGE mylist 0 -1
1) "hello"
2) "world"
> LPUSH mylist "world"
(integer) 1
> LPUSH mylist "hello"
(integer) 2
> LRANGE mylist 0 -1
1) "hello"
2) "world"
# LPUSHX
# 语法
LPUSHX key element [element ...]
# 描述
仅当 key 已经存在且存储的是列表时,才将指定的值插入到该列表的头部。与 LPUSH 命令相反,如果 key 尚不存在,则不执行任何操作
# 参数
- key
键名
- element
待插入的值
# 示例
> LPUSH mylist "World"
(integer) 1
> LPUSHX mylist "Hello"
(integer) 2
> LPUSHX myotherlist "Hello"
(integer) 0
> LRANGE mylist 0 -1
1) "Hello"
2) "World"
> LRANGE myotherlist 0 -1
(empty array)
# LRANGE
# 语法
LRANGE key start stop
# 描述
返回存储在 key 中的列表的指定元素。偏移量 start 和 stop 是基于 0 的索引,其中 0 表示列表的第一个元素,1 表示下一个元素,依此类推
# 参数
- key
键名
- start
基于 0 的起始索引。负数索引表示从列表尾部开始倒数计算
- stop
基于 0 的起始索引(边界值)。负数索引表示从列表尾部开始倒数计算
# 示例
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> LRANGE mylist 0 0
1) "one"
> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
> LRANGE mylist 5 10
(empty array)
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> LRANGE mylist 0 0
1) "one"
> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
LRANGE mylist 5 10
(empty array)
# LREM
# 语法
LREM key count element
# 描述
- 从 key 对应的列表中,移除前 count 个与 element 相等的元素。count 参数的具体作用如下:
- count > 0:从表头向表尾搜索,移除与 element 相等的元素;
- count < 0:从表尾向表头搜索,移除与 element 相等的元素;
- count = 0:移除列表中所有与 element 相等的元素
# 参数
- key
键名
- COUNT
要弹出的元素数量。默认值为 1
- element
待插入的值
# 示例
> RPUSH mylist "hello"
(integer) 1
> RPUSH mylist "hello"
(integer) 2
> RPUSH mylist "foo"
(integer) 3
> RPUSH mylist "hello"
(integer) 4
> LREM mylist -2 "hello"
(integer) 2
> LRANGE mylist 0 -1
1) "hello"
2) "foo"
# LSET
# 语法
LSET key index element
# 描述
将列表中指定索引(index)位置的元素替换为 element
# 参数
- key
键名
- index
要返回的元素的从零开始的索引。负数索引从尾部开始计算
- element
待插入的值
# 示例
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> LSET mylist 0 "four"
OK
> LSET mylist -2 "five"
OK
> LRANGE mylist 0 -1
1) "four"
2) "five"
3) "three"
# LTRIM
# 语法
LTRIM key start stop
# 描述
对现有的列表进行修剪,使其仅保留指定范围内的元素。start 和 stop 都是从 0 开始计算的索引,其中 0 代表列表的第一个元素,1 代表下一个元素,依此类推
# 参数
- key
键名
- start
基于 0 的起始索引。负数索引表示从列表尾部开始倒数计算
- stop
基于 0 的起始索引(边界值)。负数索引表示从列表尾部开始倒数计算
# 示例
LPUSH mylist someelement
LTRIM mylist 0 99
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> LTRIM mylist 1 -1
OK
> LRANGE mylist 0 -1
1) "two"
2) "three"
# RPOP
# 语法
RPOP key [count]
# 描述
移除并返回存储在指定键中的列表的最后一个元素
# 参数
- key
键名
- COUNT
要弹出的元素数量。默认值为 1
# 示例
> RPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> RPOP mylist
"five"
> RPOP mylist 2
1) "four"
2) "three"
> LRANGE mylist 0 -1
1) "one"
2) "two"
> RPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
> RPOP mylist
"five"
> RPOP mylist 2
1) "four"
2) "three"
> LRANGE mylist 0 -1
1) "one"
2) "two
# RPOPLPUSH
# 语法
RPOPLPUSH source destination
# 描述
原子性地弹出源列表的最后一个元素,并将其推入目标列表的第一个位置
# 参数
- destination
目标列表的键
- source
来源列表的关键字
# 示例
> RPUSH mylist "one"
(integer) 1
> RPUSH mylist "two"
(integer) 2
> RPUSH mylist "three"
(integer) 3
> RPOPLPUSH mylist myotherlist
"three"
> LRANGE mylist 0 -1
1) "one"
2) "two"
> LRANGE myotherlist 0 -1
1) "three"
# RPUSH
# 语法
RPUSH key element [element ...]
# 描述
将指定的所有值依次插入到 key 对应列表的尾部。如果 key 还不存在,系统会先创建一个空列表,然后再执行插入操作。但如果 key 当前对应的值不是列表类型,就会直接报错
# 参数
- key
键名
- element
待插入的值
# 示例
> RPUSH mylist "hello"
(integer) 1
> RPUSH mylist "world"
(integer) 2
> LRANGE mylist 0 -1
1) "hello"
2) "world"
> RPUSH mylist "hello"
(integer) 1
> RPUSH mylist "world"
(integer) 2
> LRANGE mylist 0 -1
1) "hello"
2) "world"
# RPUSHX
# 语法
RPUSHX key element [element ...]
# 描述
只有当 key 已经存在并且确实是一个列表时,才会将指定的值插入到该列表的尾部。与 RPUSH 不同的是,如果 key 还不存在,这个命令不会做任何操作
# 参数
- key
键名
- element
待插入的值
# 示例
> RPUSH mylist "Hello"
(integer) 1
> RPUSHX mylist "World"
(integer) 2
> RPUSHX myotherlist "World"
(integer) 0
> LRANGE mylist 0 -1
1) "Hello"
2) "World"
> LRANGE myotherlist 0 -1
(empty array)