*HRANDFIELD 命令
从 Hash 中随机返回一个或多个 field,可选择是否返回 value。Redis 6.2+ 引入。
*语法
HRANDFIELD key [count [WITHVALUES]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| count | Integer | 否 | 返回数量。count>0 不重复;count<0 允许重复 |
| WITHVALUES | 标志 | 否 | 同时返回 value |
*返回值
| 条件 | 返回值 |
|---|---|
| 无参数 | 单个 field(String)或 nil |
| count>0 无 WITHVALUES | field 数组,不重复 |
| count>0 WITHVALUES | [field, value, field, value, ...] 数组 |
| count<0 | 允许重复的 field 数组 |
| key 不存在 | nil 或空数组 [] |
*时间复杂度
O(N),N 为返回的 field 数量。
*示例
> HSET user:1001 name "Alice" age "30" city "Beijing"
(integer) 3
> HRANDFIELD user:1001
"age"
> HRANDFIELD user:1001 2
1) "name"
2) "city"
> HRANDFIELD user:1001 2 WITHVALUES
1) "name"
2) "Alice"
3) "age"
4) "30"
# 允许重复
> HRANDFIELD user:1001 -3
1) "city"
2) "city"
3) "age"
*常见错误
- 对非 Hash 使用:返回 WRONGTYPE。
*最佳实践
- 随机采样:从 Hash 中随机获取 field 样本,用于分析或测试。
*FAQ
Q: HRANDFIELD 和 SRANDMEMBER 有什么区别? A: HRANDFIELD 从 Hash 中随机取 field;SRANDMEMBER 从 Set 中随机取 member。