Redis 里 LPUSH / RPUSH / LSET / LREM
·
下面用直观 + 对照表 + 示例的方式,把 Redis 里 LPUSH / RPUSH / LSET / LREM 一次讲清楚,重点放在你问的 LPUSH 和 RPUSH 的区别。
一、LPUSH 和 RPUSH 的核心区别
一句话总结:
- LPUSH:从 左边(头部) 插入
- RPUSH:从 右边(尾部) 插入
Redis 的 List 是一个双端队列(Deque)。
1️⃣ LPUSH(Left Push)
LPUSH mylist a b c
执行顺序是 从左到右依次插入到左侧:
结果:
c b a
👉 因为:
- 先插入
a→ [a] - 再插入
b→ [b a] - 再插入
c→ [c b a]
📌 特点
- 新元素在最前面
- 常用于:最新消息、时间线、栈(Stack)
2️⃣ RPUSH(Right Push)
RPUSH mylist a b c
结果:
a b c
📌 特点
- 新元素在最后面
- 常用于:队列(Queue)、按顺序追加数据
🔍 LPUSH vs RPUSH 对比表
| 命令 | 插入位置 | 元素顺序 | 常见用途 |
|---|---|---|---|
| LPUSH | 左侧(头) | 反转 | 栈、最新数据 |
| RPUSH | 右侧(尾) | 保持 | 队列、日志 |
二、LSET —— 修改指定下标的值
LSET key index value
📌 作用
- 修改 list 中 指定下标 的元素
- 不会改变长度
示例:
LRANGE mylist 0 -1
# a b c
LSET mylist 1 x
LRANGE mylist 0 -1
# a x c
⚠️ 注意:
- 下标从 0 开始
- 越界会报错:
ERR index out of range
三、LREM —— 删除指定值的元素
LREM key count value
参数含义(重点)
| count | 行为 | ||
|---|---|---|---|
> 0 |
从左往右删除 count 个 | ||
< 0 |
从右往左删除 | abs(count) | 个 |
= 0 |
删除 所有 value |
示例
RPUSH mylist a b a c a
当前:
a b a c a
删除 1 个 a(从左)
LREM mylist 1 a
# b a c a
删除 1 个 a(从右)
LREM mylist -1 a
# a b a c
删除所有 a
LREM mylist 0 a
# b c
四、典型使用场景总结
| 场景 | 推荐命令 |
|---|---|
| 最新消息流 | LPUSH + LTRIM |
| 普通队列 | RPUSH + LPOP |
| 栈结构 | LPUSH + LPOP |
| 去重 / 清洗 | LREM |
更多推荐


所有评论(0)