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

*常见错误

  1. 对非 Hash 使用:返回 WRONGTYPE。

*最佳实践

  1. 随机采样:从 Hash 中随机获取 field 样本,用于分析或测试。

*FAQ

Q: HRANDFIELD 和 SRANDMEMBER 有什么区别? A: HRANDFIELD 从 Hash 中随机取 field;SRANDMEMBER 从 Set 中随机取 member。