*Redis SRANDMEMBER 命令
随机返回 Set 中指定数量的成员,不移除。
*语法
SRANDMEMBER key [count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Set 的键名 |
| count | Integer | 否 | 返回数量,默认 1。count>0 不重复;count<0 允许重复 |
*返回值
| 条件 | 返回值 |
|---|---|
| count=1(默认) | 单个成员(String)或 nil |
| count != 1 | 成员数组 |
| Set 为空或不存在 | nil 或空数组 |
*时间复杂度
O(count)
*
*示例
> SADD myset a b c d e
(integer) 5
# 随机返回 1 个(默认)
> SRANDMEMBER myset
"b"
# 返回 3 个不重复成员
> SRANDMEMBER myset 3
1) "a"
2) "d"
3) "c"
# 返回 3 个允许重复
> SRANDMEMBER myset -3
1) "b"
2) "b"
3) "e"
*常见错误
- count 正负含义不同:count>0 不重复;count<0 允许重复返回。
*最佳实践
- 放回抽样:抽奖/推荐系统中随机推荐 N 个,用 SRANDMEMBER 不破坏原集合。
- 负 count 模拟概率:count=-100 从 5 个成员的 Set 中随机取 100 个(允许重复),可用于加权抽样近似。
*FAQ
Q: SRANDMEMBER 和 SPOP 怎么选择? A: 不需要移除用 SRANDMEMBER;需要移除(如抽奖不放回)用 SPOP。
Q: count 大于 Set 大小怎么办? A: count>0 时返回全部成员(不重复);count<0 时返回 |count| 个(允许重复)。