*Redis SPOP 命令
随机移除并返回 Set 中指定数量的成员。
*语法
SPOP key [count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Set 的键名 |
| count | Integer | 否 | 移除数量,默认 1(Redis 3.2+) |
*返回值
| 条件 | 返回值 |
|---|---|
| count=1(默认) | 返回单个成员(String)或 nil |
| count>1 | 返回成员数组,数量 <= count |
| Set 为空或不存在 | nil 或空数组 |
*时间复杂度
O(count)
*
*示例
> SADD myset a b c d e
(integer) 5
> SPOP myset
"c"
> SPOP myset 2
1) "a"
2) "d"
> SCARD myset
(integer) 2
*常见错误
- count 大于 Set 大小:返回全部成员,不报错。
*最佳实践
- 抽奖/随机抽样:SPOP 随机移除成员,适合不放回抽奖。
- 分批处理:从 Set 中随机取出一批任务处理,处理完再 SPOP 下一批。
*FAQ
Q: SPOP 是随机的吗? A: 是。返回的成员是均匀随机的。
Q: SPOP 和 SRANDMEMBER 有什么区别? A: SPOP 移除并返回;SRANDMEMBER 只返回不移除。需要不放回抽样用 SPOP,放回抽样用 SRANDMEMBER。