Redis(14)Redis的列表(List)类型有哪些常用命令?

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"

注意事项

  1. 索引从 0 开始:列表中的索引从 0 开始,负数索引用于从尾部开始计数(-1 是最后一个元素)。
  2. 原子性操作:所有列表操作都是原子的,即使多个客户端同时访问同一个列表,也不会出现数据不一致的情况。
  3. 阻塞操作 :BLPOP 和 BRPOP 命令是阻塞操作,适用于需要等待元素可用的场景。

总结

Redis 的列表类型命令非常丰富,支持多种操作,如插入、删除、获取、设置、修剪、阻塞等。通过这些命令,你可以对 Redis 中的列表类型数据进行灵活的操作和管理。上述示例代码涵盖了大多数常用的列表命令,帮助你快速掌握 Redis 列表类型的操作。

相关推荐
她的男孩8 小时前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
颜进强8 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
xn71338 小时前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
谢亮_vipxieliang8 小时前
Go defer、panic与recover核心知识点
开发语言·后端·golang
颜进强8 小时前
17 · 自定义 Provider 四形态:useValue / useClass / useFactory / useExisting 到底在选什么
前端·后端·ai编程
碎觉崽8 小时前
我的 QQ 机器人被腾讯反复踢下线,折腾了半个月才搞明白
后端
打工仔折腾 AI9 小时前
从零写一个CAD 05:以鼠标为中心的滚轮缩放矩阵顺序不能反
后端·python·线性代数·性能优化·矩阵·计算机外设·ai agent 实战
谢亮_vipxieliang9 小时前
Go基础数据类型全解
开发语言·后端·golang
专业程序开发源9 小时前
springboot古城景区管理系统88564-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
小蒜学长9 小时前
基于微信小程序的遇见咖啡店点餐系统设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序·咖啡店点餐系统