Redis 的列表(List)类型是一个链表结构,它支持在列表的头部和尾部进行快速的插入和删除操作。列表类型非常适合实现栈、队列等数据结构。下面详细介绍 Redis 列表类型的常用命令,并结合代码示例进行展示。
1. LPUSH - 在列表头部插入元素
LPUSH
命令用于在列表的头部插入一个或多个元素。
bash
LPUSH key value1 [value2 ...]
示例:
bash
LPUSH mylist "World"
LPUSH mylist "Hello"
2. RPUSH - 在列表尾部插入元素
RPUSH
命令用于在列表的尾部插入一个或多个元素。
bash
RPUSH key value1 [value2 ...]
示例:
bash
RPUSH mylist "Redis"
3. LPOP - 移除并返回列表头部的元素
LPOP
命令用于移除并返回列表头部的元素。
bash
LPOP key
示例:
bash
LPOP mylist
4. RPOP - 移除并返回列表尾部的元素
RPOP
命令用于移除并返回列表尾部的元素。
bash
RPOP key
示例:
bash
RPOP mylist
5. LRANGE - 获取列表指定范围内的元素
LRANGE
命令用于获取列表中指定范围内的元素,范围用起始和结束索引指定,索引从 0 开始。
bash
LRANGE key start stop
示例:
bash
LRANGE mylist 0 -1 # 获取整个列表
6. LINDEX - 获取列表中指定索引的元素
LINDEX
命令用于获取列表中指定索引的元素。
bash
LINDEX key index
示例:
bash
LINDEX mylist 0
7. LLEN - 获取列表的长度
LLEN
命令用于获取列表的长度。
bash
LLEN key
示例:
bash
LLEN mylist
8. LSET - 设置列表中指定索引的元素
LSET
命令用于设置列表中指定索引的元素。
bash
LSET key index value
示例:
bash
LSET mylist 0 "New Value"
9. LREM - 移除列表中与指定值相等的元素
LREM
命令用于移除列表中与指定值相等的元素。
bash
LREM key count value
count > 0
:从头到尾移除最多 count 个元素count < 0
:从尾到头移除最多 count 个元素count = 0
:移除所有匹配的元素
示例:
bash
LREM mylist 1 "Hello"
10. LTRIM - 对列表进行修剪,只保留指定范围内的元素
LTRIM
命令用于对列表进行修剪,只保留指定范围内的元素,其余元素将被删除。
bash
LTRIM key start stop
示例:
bash
LTRIM mylist 0 1
11. BLPOP - 阻塞式移除并返回列表的头部元素
BLPOP
命令用于阻塞式地移除并返回列表的头部元素,如果列表为空,则阻塞等待直到有元素可用或超时。
bash
BLPOP key [key ...] timeout
示例:
bash
BLPOP mylist 10 # 等待最多10秒
12. BRPOP - 阻塞式移除并返回列表的尾部元素
BRPOP
命令用于阻塞式地移除并返回列表的尾部元素,如果列表为空,则阻塞等待直到有元素可用或超时。
bash
BRPOP key [key ...] timeout
示例:
bash
BRPOP mylist 10 # 等待最多10秒
13. RPOPLPUSH - 移除列表尾部的元素,并将该元素插入到另一个列表的头部
RPOPLPUSH
命令用于移除列表尾部的元素,并将该元素插入到另一个列表的头部。
bash
RPOPLPUSH source destination
示例:
bash
RPOPLPUSH mylist anotherlist
示例代码
下面是一个完整的示例,展示了如何使用上述常用命令操作 Redis 列表类型:
bash
# 启动 Redis CLI
redis-cli
# 在列表头部插入元素
LPUSH mylist "World"
LPUSH mylist "Hello"
# 在列表尾部插入元素
RPUSH mylist "Redis"
# 获取列表的长度
LLEN mylist # 输出: 3
# 获取整个列表
LRANGE mylist 0 -1 # 输出: 1) "Hello" 2) "World" 3) "Redis"
# 获取列表中指定索引的元素
LINDEX mylist 0 # 输出: "Hello"
# 设置列表中指定索引的元素
LSET mylist 0 "New Value"
LRANGE mylist 0 -1 # 输出: 1) "New Value" 2) "World" 3) "Redis"
# 移除并返回列表头部的元素
LPOP mylist # 输出: "New Value"
LRANGE mylist 0 -1 # 输出: 1) "World" 2) "Redis"
# 移除并返回列表尾部的元素
RPOP mylist # 输出: "Redis"
LRANGE mylist 0 -1 # 输出: 1) "World"
# 移除列表中与指定值相等的元素
LPUSH mylist "Hello"
LPUSH mylist "Hello"
LPUSH mylist "Hello"
LREM mylist 2 "Hello"
LRANGE mylist 0 -1 # 输出: 1) "Hello" 2) "World"
# 对列表进行修剪
LTRIM mylist 0 0
LRANGE mylist 0 -1 # 输出: 1) "Hello"
# 阻塞式移除并返回列表头部的元素
BLPOP mylist 10 # 如果列表为空,等待最多10秒
# 阻塞式移除并返回列表尾部的元素
BRPOP mylist 10 # 如果列表为空,等待最多10秒
# 移除列表尾部的元素,并将该元素插入到另一个列表的头部
LPUSH source "one"
LPUSH source "two"
RPOPLPUSH source destination
LRANGE source 0 -1 # 输出: 1) "two"
LRANGE destination 0 -1 # 输出: 1) "one"
注意事项
- 索引从 0 开始:列表中的索引从 0 开始,负数索引用于从尾部开始计数(-1 是最后一个元素)。
- 原子性操作:所有列表操作都是原子的,即使多个客户端同时访问同一个列表,也不会出现数据不一致的情况。
- 阻塞操作 :
BLPOP
和BRPOP
命令是阻塞操作,适用于需要等待元素可用的场景。
总结
Redis 的列表类型命令非常丰富,支持多种操作,如插入、删除、获取、设置、修剪、阻塞等。通过这些命令,你可以对 Redis 中的列表类型数据进行灵活的操作和管理。上述示例代码涵盖了大多数常用的列表命令,帮助你快速掌握 Redis 列表类型的操作。