*Redis RPOPLPUSH 命令 从列表弹出元素并推入另一列表(已弃用,推荐 LMOVE)
*RPOPLPUSH
*语法
RPOPLPUSH source destination
*说明
⚠️ 已弃用(Deprecated):从 Redis 6.2.0 起,RPOPLPUSH 已被弃用。请使用
LMOVE source destination RIGHT LEFT替代,语义完全一致且更灵活。
RPOPLPUSH 原子地(atomically)从列表 source 中移除最后一个元素,并将其插入到列表 destination 的头部。
- 当
source不存在时,返回nil,不执行任何操作。 - 当
source和destination为同一个key时,该命令可用于实现环形列表(circular list)。 - 该命令的语义等价于
LMOVE source destination RIGHT LEFT。
*示例
# 构建源列表和目标列表
redis-cli RPUSH mylist "one"
redis-cli RPUSH mylist "two"
redis-cli RPUSH mylist "three"
# 从 mylist 尾部弹出,推入 myotherlist 头部
redis-cli RPOPLPUSH mylist myotherlist
# 查看结果
redis-cli LRANGE mylist 0 -1
redis-cli LRANGE myotherlist 0 -1
# source 为空时返回 nil
redis-cli RPOPLPUSH empty_list dest
*返回值
- Bulk string reply:被移动的元素值。
- Nil reply:
source不存在或为空时,返回nil。
*版本兼容性
| 版本 | 说明 |
|---|---|
| >= 6.2.0 | 已弃用,请使用 LMOVE 替代 |
| >= 1.2.0 | 可用 |
| < 1.2.0 | 不支持 |
*时间复杂度
O(1)。
*模式:安全队列
RPOPLPUSH(或 LMOVE)可用于构建可靠的消息队列:消费者将消息从主队列原子地移动到待处理队列(processing queue),处理完成后再用 LREM 删除。若客户端崩溃,消息仍保留在待处理队列中,不会丢失。