在隔离的redis 8.12候选版环境中,可用zmove把有序集合里分数最小或最大的成员原子转移到另一集合;按名称挑选时改用zmovemember,并以nx或xx限定目标状态。先通过command info确认实例支持这些命令,不要在未升级的稳定实例中直接套用新语法。
建立同一测试任务的两个集合
COMMAND INFO ZMOVE ZMOVEMEMBER BZMOVE
ZADD demo:{jobs}:ready 10 job-a 20 job-b 30 job-c
ZMOVE demo:{jobs}:ready demo:{jobs}:running MIN COUNT 2
ZRANGE demo:{jobs}:ready 0 -1 WITHSCORES
ZRANGE demo:{jobs}:running 0 -1 WITHSCORES示例使用专门的demo键,不清空已有库。两个键采用相同的{jobs}标签,便于在Cluster测试中落入同一槽。返回值是实际移动的成员与分数配对,哪怕只有一个成员也保持嵌套结构;没有移动时可能返回空值,不能按成功移动一个成员处理。

Redis 8.12源代码中的ZMOVE命令定义
按成员名称及目标状态筛选
ZADD demo:{jobs}:ready 40 job-d 50 job-e
ZMOVEMEMBER demo:{jobs}:ready demo:{jobs}:running NX MEMBERS 2 job-d job-e
ZRANGE demo:{jobs}:running 0 -1 WITHSCORESNX只移动目标中尚不存在的指定成员;XX只移动目标中已经存在的成员。不满足条件的成员保留在源集合,重复名称只处理一次。MEMBERS后的数量应与随后的名称项匹配,不能把ZMOVE的COUNT参数照搬到这里。

官方定义列出ZMOVEMEMBER的NX、XX和MEMBERS参数

BZMOVE命令定义包含阻塞等待与超时参数
按分数选择或等待新任务
ZMOVE demo:{jobs}:ready demo:{jobs}:running BYSCORE 0 100 COUNT 10
BZMOVE demo:{jobs}:ready demo:{jobs}:running MIN 5 COUNT 1BZMOVE示例最多等待5秒;超时无结果不等于执行异常。阻塞连接在等待期间不能作为普通共享请求连接使用。移动到running只是状态转移,不会替业务实现任务确认、失败重投或超时回收;这些仍需单独设计并验证。


















