*Redis RPOPLPUSH 命令

移除 source List 的尾部元素,并将该元素插入到 destination List 的头部。


*语法

RPOPLPUSH source destination

*参数说明

参数 类型 必填 说明
source String 源 List 键名
destination String 目标 List 键名

*返回值

条件 返回值
source 非空 返回被移动的元素(String)
source 为空 nil

*时间复杂度

O(1)

*

*示例

> RPUSH source a b c
(integer) 3

> RPOPLPUSH source dest
"c"

> LRANGE source 0 -1
1) "a"
2) "b"

> LRANGE dest 0 -1
1) "c"

*常见错误

  1. source 和 destination 相同:支持,实现 List 元素轮询(如循环队列)。

*最佳实践

  1. 可靠队列:消费者用 RPOPLPUSH 将任务从待处理队列移到处理中队列,处理完成后 LREM 处理中队列。崩溃时从处理中队列恢复。
  2. Redis 6.2+ 替代LMOVE source destination RIGHT LEFT 是 RPOPLPUSH 的通用替代。

*FAQ

Q: RPOPLPUSH 是原子操作吗? A: 是。弹出和插入在一个原子操作中完成,不会丢失元素。

Q: source 为空时 destination 会创建吗? A: 不会。source 为空时什么都不做,返回 nil。