下面用直观 + 对照表 + 示例的方式,把 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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐