List
Redis
中的 list
是一个双端链表结构, 常用于栈, 队列, 消息队列等场景
list
对两端的操作性能很高, 通过索引下标的操作中间的节点性能会较差
若 key
不存在, 创建新的链表
若 key
存在, 新增内容
若将 key
对应的 value
全部移除, 对应的 key
就被删除
其中值得注意的是 list
与编程语言中的数组一样, 索引是从 0 开始的
LPUSH
将所有指定的值插入到 存储在 的list
的 左边。 如果不存在,则在执行推送之前将其创建为空list
操作。 若执行的 key
对象不是list
时,将返回错误。
即将指定的值依次添加到 list
左边
语法:
LPUSH key element [element ...]
LPUSHX
仅在已存在并保存list
时,在存储在 的list
的左边插入指定的值。 与 LPUSH
相反,当 尚未 时,将不执行任何作 存在。
语法:
LPUSHX key element [element ...]
RPUSH
将所有指定的值插入到 存储在 的list
的右边。 如果不存在,则在执行推送之前将其创建为空list
操作。 若执行的 key
对象不是list
时,将返回错误。
即将指定的值依次添加到 list
右边
语法:
RPUSH key element [element ...]
RPUSHX
仅在已存在并保存list
时,才在存储在 中的list
右边插入指定的值。 与 RPUSH
相反,当 尚未 时,将不执行任何作 存在。
语法:
RPUSHX key element [element ...]
LRANGE
从左往右依次遍历从 start 到 end 的 list
的元素
语法:
LRANGE key start stop
# 常用命令
LRANGE key 0 -1
LPOP
删除并返回存储在 中的list
的左边第一个元素。
默认情况下,该命令从list
的左边删除单个元素。 当提供可选参数时,命令从list
的左边删除指定数量的 value
,具体取决于list
的长度。
语法:
LPOP key [count]
例:
127.0.0.1:6379> lrange list_a 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> lpop list_a 3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list_a 0 -1
1) "4"
2) "5"
3) "6"
RPOP
删除并返回存储在 中的list
的右边边第一个元素。
默认情况下,该命令从list
的右边删除单个元素。 当提供可选参数时,命令从list
的右边删除指定数量的 value
,具体取决于list
的长度。
语法:
RPOP key [count]
LINDEX
返回存储在 中的list
中 index 处的元素。 索引从零开始,且可以使用负数表示倒数第 n 个索引的元素。
语法:
LINDEX key index
LLEN
获取 list
中元素的个数, 如果不存在,则将其解释为空 list
并返回。当指定的 key
不是 list
时, 将报错.
语法:
LLEN key
LREM
从 list
中删除指定个数的指定值
语法:
LREM key count element
参数解释:
-
count
:这个参数决定了要移除多少个匹配的元素:
- 如果
count > 0
,则从list
的左侧向右开始移除最多count
个匹配的元素。 - 如果
count < 0
,则从list
的右侧向左开始移除最多|count|
个匹配的元素(这里的|count|
表示count
的绝对值)。 - 如果
count = 0
,则移除所有与给定element
相匹配的元素,无论它们在list
中的位置如何。
- 如果
-
element:这是你想要从
list
中移除的值。
LTRIM
对 list
中的 value
进行切片, 使其只保留指定范围内的元素。
语法:
LTRIM key start end
LMOVE
将 list1
的一个或多个元素移动至 list2
中, 此操作可以在同一个 list
中进行, 也可以在不同的 list
中进行, 这个命令是原子性的, 整个操作是在一个步骤中完成的,从而避免了并发环境下的竞态条件。
语法:
LMOVE source destination LEFT|RIGHT LEFT|RIGHT
参数解释:
-
source:源
list
的键名。 -
destination:目标
list
的键名。 -
LEFT|RIGHT:指定从源
list
和向目标list
中添加元素的方向。可以组合使用来指定具体的操作方向:
- 第一个方向(
LEFT|RIGHT
)指定了从源list
中删除元素的方向。 - 第二个方向(
LEFT|RIGHT
)指定了向目标list
中添加元素的方向。
- 第一个方向(
LSET
更新 list
中指定索引位置的元素.
语法:
LSET key index value
参数解释:
- index:你想要修改的元素在
list
中的索引位置。可以使用正数来从list
头部开始计数(0为第一个元素),或者使用负数从list
尾部开始计数(-1为最后一个元素)。 - value:新的值,将被放置在由
index
指定的位置上。
LINSERT
在 list
中某个特定值的前面或后面插入一个新元素。此命令适用于不改变 list
其他
部分元素的情况下添加元素。
语法:
LINSERT key BEFORE|AFTER pivot value
参数解释:
- BEFORE|AFTER:指定新元素应该插入到
pivot
元素之前还是之后。 - pivot:这是你想要在其之前或之后插入新元素的目标值。
- value:这是你想要插入的新元素的值。