*Redis RPOPLPUSH 命令 从列表弹出元素并推入另一列表(已弃用,推荐 LMOVE)

*RPOPLPUSH

*语法

RPOPLPUSH source destination

*说明

⚠️ 已弃用(Deprecated):从 Redis 6.2.0 起,RPOPLPUSH 已被弃用。请使用 LMOVE source destination RIGHT LEFT 替代,语义完全一致且更灵活。

RPOPLPUSH 原子地(atomically)从列表 source 中移除最后一个元素,并将其插入到列表 destination 的头部。

  • source 不存在时,返回 nil,不执行任何操作。
  • sourcedestination 为同一个 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 replysource 不存在或为空时,返回 nil

*版本兼容性

版本 说明
>= 6.2.0 已弃用,请使用 LMOVE 替代
>= 1.2.0 可用
< 1.2.0 不支持

*时间复杂度

O(1)。

*模式:安全队列

RPOPLPUSH(或 LMOVE)可用于构建可靠的消息队列:消费者将消息从主队列原子地移动到待处理队列(processing queue),处理完成后再用 LREM 删除。若客户端崩溃,消息仍保留在待处理队列中,不会丢失。