以下是 Redis 中 列表(List)类型 的完整内容整理,包括命令大全、使用场景、高级技巧与注意事项,非常适用于消息队列、任务列表、时间线等功能开发。
📚 目录
🧾 列表简介
- 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 等)。只需告诉我需求即可!
发表回复