*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"
*常见错误
- source 和 destination 相同:支持,实现 List 元素轮询(如循环队列)。
*最佳实践
- 可靠队列:消费者用 RPOPLPUSH 将任务从待处理队列移到处理中队列,处理完成后 LREM 处理中队列。崩溃时从处理中队列恢复。
- Redis 6.2+ 替代:
LMOVE source destination RIGHT LEFT是 RPOPLPUSH 的通用替代。
*FAQ
Q: RPOPLPUSH 是原子操作吗? A: 是。弹出和插入在一个原子操作中完成,不会丢失元素。
Q: source 为空时 destination 会创建吗? A: 不会。source 为空时什么都不做,返回 nil。