*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

*常见错误

  1. count 大于 Set 大小:返回全部成员,不报错。

*最佳实践

  1. 抽奖/随机抽样:SPOP 随机移除成员,适合不放回抽奖。
  2. 分批处理:从 Set 中随机取出一批任务处理,处理完再 SPOP 下一批。

*FAQ

Q: SPOP 是随机的吗? A: 是。返回的成员是均匀随机的。

Q: SPOP 和 SRANDMEMBER 有什么区别? A: SPOP 移除并返回;SRANDMEMBER 只返回不移除。需要不放回抽样用 SPOP,放回抽样用 SRANDMEMBER