--- acl_categories: - '@read' - '@hash' - '@slow' arguments: - display_text: key key_spec_index: 0 name: key type: key - arguments: - display_text: count name: count type: integer - display_text: withvalues name: withvalues optional: true token: WITHVALUES type: pure-token name: options optional: true type: block arity: -2 categories: - docs - develop - stack - oss - rs - rc - oss - kubernetes - clients command_flags: - readonly complexity: O(N) where N is the number of fields returned description: Returns one or more random fields from a hash. group: hash hidden: false hints: - nondeterministic_output key_specs: - RO: true access: true begin_search: spec: index: 1 type: index find_keys: spec: keystep: 1 lastkey: 0 limit: 0 type: range linkTitle: HRANDFIELD railroad_diagram: /images/railroad/hrandfield.svg since: 6.2.0 summary: Returns one or more random fields from a hash. syntax_fmt: HRANDFIELD key [count [WITHVALUES]] title: HRANDFIELD --- When called with just the `key` argument, return a random field from the hash value stored at `key`. If the provided `count` argument is positive, return an array of **distinct fields**. The array's length is either `count` or the hash's number of fields ([`HLEN`]({{< relref "/commands/hlen" >}})), whichever is lower. If called with a negative `count`, the behavior changes and the command is allowed to return the **same field multiple times**. In this case, the number of returned fields is the absolute value of the specified `count`. The optional `WITHVALUES` modifier changes the reply so it includes the respective values of the randomly selected hash fields. ## Examples {{% redis-cli %}} HSET coin heads obverse tails reverse edge null HRANDFIELD coin HRANDFIELD coin HRANDFIELD coin -5 WITHVALUES {{% /redis-cli %}} ## Specification of the behavior when count is passed When the `count` argument is a positive value this command behaves as follows: * No repeated fields are returned. * If `count` is bigger than the number of fields in the hash, the command will only return the whole hash without additional fields. * The order of fields in the reply is not truly random, so it is up to the client to shuffle them if needed. When the `count` is a negative value, the behavior changes as follows: * Repeating fields are possible. * Exactly `count` fields, or an empty array if the hash is empty (non-existing key), are always returned. * The order of fields in the reply is truly random. ## Redis Software and Redis Cloud compatibility | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | ## Return information {{< multitabs id="hrandfield-return-info" tab1="RESP2" tab2="RESP3" >}} Any of the following: * [Nil reply](../../develop/reference/protocol-spec#bulk-strings): if the key doesn't exist * [Bulk string reply](../../develop/reference/protocol-spec#bulk-strings): a single, randomly selected field when the `count` option is not used * [Array reply](../../develop/reference/protocol-spec#arrays): a list containing `count` fields when the `count` option is used, or an empty array if the key does not exists. * [Array reply](../../develop/reference/protocol-spec#arrays): a list of fields and their values when `count` and `WITHVALUES` were both used. -tab-sep- Any of the following: * [Null reply](../../develop/reference/protocol-spec#nulls): if the key doesn't exist * [Bulk string reply](../../develop/reference/protocol-spec#bulk-strings): a single, randomly selected field when the `count` option is not used * [Array reply](../../develop/reference/protocol-spec#arrays): a list containing `count` fields when the `count` option is used, or an empty array if the key does not exists. * [Array reply](../../develop/reference/protocol-spec#arrays): a list of fields and their values when `count` and `WITHVALUES` were both used. {{< /multitabs >}}