以下是 Redis 中 列表(List)类型 的完整内容整理,包括命令大全、使用场景、高级技巧与注意事项,非常适用于消息队列、任务列表、时间线等功能开发。


📚 目录

  1. 列表简介
  2. 核心命令大全
  3. 典型使用场景
  4. 高级用法与技巧
  5. 注意事项与性能建议
  6. 参考资料

🧾 列表简介

  • Redis 列表是一个 双端链表(Linked List)
  • 可以在 头部或尾部插入/删除元素
  • 支持 阻塞式操作,适用于消息队列
  • 单个列表最多可存储 2^32 – 1(约 40 亿)个元素

🔧 核心命令大全

命令描述
LPUSH key value [value ...]从左侧插入元素(头部)
RPUSH key value [value ...]从右侧插入元素(尾部)
LPOP key移除并返回左侧元素
RPOP key移除并返回右侧元素
LRANGE key start stop获取指定区间内的元素列表
LLEN key获取列表长度
LINDEX key index获取指定索引的元素
LSET key index value设置指定索引的元素值
LREM key count value移除指定个数的元素
LTRIM key start stop截取保留指定区间元素
RPOPLPUSH source destination从源列表右弹出并压入目标列表左端
BLPOP key [key ...] timeout阻塞式左弹出
BRPOP key [key ...] timeout阻塞式右弹出
BRPOPLPUSH source destination timeout阻塞式弹出+插入

🧪 典型使用场景

✅ 消息队列 / 任务队列

RPUSH task:queue "job1"
LPUSH task:queue "job2"
BRPOP task:queue 0  # 消费者阻塞式消费

✅ 聊天记录、评论流、时间线

LPUSH chat:room:1234 "hello"
LRANGE chat:room:1234 0 9  # 最新10条消息
LTRIM chat:room:1234 0 99  # 保留最新100条

✅ 版本控制、历史记录

LPUSH config:backup:app1 "v1.0"
LPUSH config:backup:app1 "v1.1"


🛠 高级用法与技巧

⚙ 有限队列(保留前 N 个)

LPUSH timeline:user:1 "new_post_id"
LTRIM timeline:user:1 0 99  # 仅保留最近100条

🚧 任务转移队列(弹出并转移)

RPOPLPUSH queue:pending queue:processing

⏱ 阻塞式消费

BLPOP task:queue 10  # 等待最多10秒弹出

🧰 替换元素

LSET list:key 2 "updated"  # 替换下标为2的元素


⚠️ 注意事项与性能建议

注意点建议说明
⚠ 长列表遍历性能下降长列表操作如 LRANGE/LREM 会导致阻塞
✅ 尽量控制元素数量推荐列表元素数控制在几千以内
❌ 避免频繁 LRANGE 大区间大量读取数据建议分页或使用 Stream 类型
📦 原子性强RPOPLPUSH 等命令天然支持任务安全迁移

📎 参考资料


如果你需要我为你写一个完整的基于列表实现的消息队列、聊天系统后端、或阻塞任务消费者的脚本,我可以为你生成示例代码(支持 Python、Node.js、Lua 等)。只需告诉我需求即可!