*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"

*常见错误

  1. count 正负含义不同:count>0 不重复;count<0 允许重复返回。

*最佳实践

  1. 放回抽样:抽奖/推荐系统中随机推荐 N 个,用 SRANDMEMBER 不破坏原集合。
  2. 负 count 模拟概率:count=-100 从 5 个成员的 Set 中随机取 100 个(允许重复),可用于加权抽样近似。

*FAQ

Q: SRANDMEMBER 和 SPOP 怎么选择? A: 不需要移除用 SRANDMEMBER;需要移除(如抽奖不放回)用 SPOP

Q: count 大于 Set 大小怎么办? A: count>0 时返回全部成员(不重复);count<0 时返回 |count| 个(允许重复)。