*Redis ZPOPMIN 命令
移除并返回 Sorted Set 中 score 最小的一个或多个成员。
*语法
ZPOPMIN key [count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Sorted Set 键名 |
| count | Integer | 否 | 弹出数量,默认 1(Redis 5.0+) |
*返回值
| 条件 | 返回值 |
|---|---|
| count=1(默认) | [member, score] 数组或空数组 |
| count>1 | [member1, score1, member2, score2, ...] 数组 |
| key 不存在或为空 | 空数组 [] |
*时间复杂度
O(log(N)*M),N 为成员数,M 为弹出数量。
*示例
> ZADD queue 100 "task1" 200 "task2" 300 "task3"
(integer) 3
> ZPOPMIN queue
1) "task1"
2) "100"
> ZPOPMIN queue 2
1) "task2"
2) "200"
3) "task3"
4) "300"
*常见错误
- 对非 Sorted Set 使用:返回 WRONGTYPE。
*最佳实践
- 优先级队列:ZPOPMIN 实现最小堆/优先级队列,score 小的优先弹出。
- 延迟队列:score 为执行时间戳,定时任务用 ZPOPMIN 弹出已到期的任务。
*FAQ
Q: ZPOPMIN 和 BZPOPMIN 有什么区别? A: ZPOPMIN 立即返回,空集合返回空数组;BZPOPMIN 阻塞等待直到有元素或超时。
Q: ZPOPMIN 会删除 key 吗? A: 当 Sorted Set 最后一个 member 被弹出后,key 自动删除。