Redis HVALS in Golang (Detailed Guide w/ Code Examples)

Use Case(s)

The Redis HVALS command is used to retrieve all the values in a hash stored at a specific key. Typical use cases in Golang include:

  1. Fetching all values of a Hash data structure in Redis when you're not interested in keys.
  2. Used as part of data migration or synchronization tasks, where you need to copy all values from one hash to another.

Code Examples

Here's an example using the popular Redigo Redis client for Go:

package main import ( "fmt" "" ) func main() { conn, err := redis.Dial("tcp", ":6379") if err != nil { panic(err) } defer conn.Close() // Set some values in a hash _, err = conn.Do("HSET", "hashkey", "field1", "value1", "field2", "value2") if err != nil { panic(err) } // Get all values of the hash values, err := redis.Strings(conn.Do("HVALS", "hashkey")) if err != nil { panic(err) } for _, value := range values { fmt.Println(value) } }

This code first sets some fields in a hash with the HSET command. Then it retrieves all the values in that hash and prints them.

Best Practices

  1. It's a good practice to always check for errors when you're using conn.Do() function to execute Redis commands. This can help identify issues like connectivity problems or incorrect command usage.
  2. If the Redis instance is remote, consider using connection pooling to manage and reuse connections. It can help improve performance by avoiding the overhead of establishing a new connection for each request.

Common Mistakes

  1. Not handling the case where the key does not exist in Redis. If HVALS is run against a non-existent key, it will just return an empty list. You should be prepared for this scenario in your application logic.
  2. Assuming that the order of values returned by HVALS is consistent. While it may appear that way, Redis does not guarantee any specific order for the returned data.


Q: What happens if the key exists but is not a Hash type? A: If you try to use HVALS on a key holding a non-hash type, Redis will return an error.

Q: Does HVALS mutate the state of the Redis database in any way? A: No, HVALS is a read-only command and doesn't affect the state of the Redis database.

Q: Can I use patterns or wildcards with HVALS? A: No, HVALS works with a single, specific key. You cannot use patterns or wildcards.

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.