Bird
Raised Fist0
Redisquery~10 mins

Hash vs string for objects in Redis - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Hash vs string for objects
Start: Store object data
↓
String
↓
End
This flow shows how storing an object in Redis can use either a single string or a hash with fields, affecting how data is stored, retrieved, and updated.
Execution Sample
Redis
SET user:1 "name:John,age:30,city:NY"
HSET user:1 name John age 30 city NY
GET user:1
HGET user:1 name
Store a user object as a string and as a hash, then retrieve the whole string and a single field from the hash.
Execution Table
StepCommandActionResult
1SET user:1 "name:John,age:30,city:NY"Store entire object as one stringOK
2HSET user:1 name John age 30 city NYStore object fields separately in hash3 (fields set)
3GET user:1Retrieve whole string value"name:John,age:30,city:NY"
4HGET user:1 nameRetrieve single field 'name' from hash"John"
5HGET user:1 ageRetrieve single field 'age' from hash"30"
6SET user:1 "name:Jane,age:31,city:LA"Overwrite whole string with new dataOK
7HSET user:1 city LAUpdate only 'city' field in hash1 (field updated)
8GET user:1Retrieve updated whole string"name:Jane,age:31,city:LA"
9HGET user:1 cityRetrieve updated 'city' field from hash"LA"
💡 Commands complete; demonstrates differences in storing and updating objects as string vs hash.
Variable Tracker
KeyStartAfter Step 1After Step 2After Step 6After Step 7
user:1 (string)null"name:John,age:30,city:NY""name:John,age:30,city:NY""name:Jane,age:31,city:LA""name:Jane,age:31,city:LA"
user:1 (hash)empty{name: John, age: 30, city: NY}{name: John, age: 30, city: NY}{name: John, age: 30, city: NY}{name: John, age: 30, city: LA}
Key Moments - 2 Insights
Why does updating a field in a hash not affect other fields?
Because each field in a hash is stored separately, updating one field only changes that field, unlike a string where the whole value must be overwritten (see steps 7 and 6 in execution_table).
Why do we need to parse the string to get individual fields?
The string stores all data as one text blob, so to get a single field like 'name', you must parse the string manually. Hashes store fields separately, so you can get them directly (see steps 3 vs 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4, what is the result of HGET user:1 name?
A"John"
B"name:John"
C"user:1"
Dnull
💡 Hint
Check the 'Result' column in execution_table row for step 4.
At which step does the string value for user:1 change to "name:Jane,age:31,city:LA"?
AStep 2
BStep 6
CStep 7
DStep 9
💡 Hint
Look at the 'Action' and 'Result' columns for the string key in execution_table.
If you want to update only the city field without affecting other data, which command is better?
ASET user:1 "new string"
BHSET user:1 city NewCity
CGET user:1
DDEL user:1
💡 Hint
Refer to steps 6 and 7 in execution_table to see how updates differ.
Concept Snapshot
Redis stores objects as either strings or hashes.
Strings hold the whole object as one text value.
Hashes store each field separately as key-value pairs.
Strings require full overwrite to update.
Hashes allow updating individual fields easily.
Use hashes for flexible field access and updates.
Full Transcript
This visual execution compares storing objects in Redis as strings versus hashes. First, the object is stored as a single string with all fields combined. Then, the same object is stored as a hash with separate fields. Retrieving the string returns the whole object text, while retrieving from the hash can get individual fields directly. Updating a string requires overwriting the entire value, but updating a hash can change just one field without affecting others. This shows the practical differences in how Redis handles these two data types for objects.

Practice

(1/5)
1. In Redis, when should you prefer using a hash over a string to store data?
easy
A. When you want to store multiple related fields under one key, like an object.
B. When you only need to store a single simple value per key.
C. When you want to store large binary data efficiently.
D. When you want to store data that changes very rarely.

Solution

  1. Step 1: Understand Redis data types

    Strings store single values per key, while hashes can store multiple fields under one key.
  2. Step 2: Match use case to data type

    If you want to store an object with multiple fields (like name, age, email), hashes are better suited.
  3. Final Answer:

    When you want to store multiple related fields under one key, like an object. -> Option A
  4. Quick Check:

    Hash = multiple fields per key [OK]
Hint: Use hashes for objects with many fields, strings for single values [OK]
Common Mistakes:
  • Thinking strings can store multiple fields easily
  • Using hashes for simple single values
  • Confusing hashes with lists or sets
2. Which of the following Redis commands correctly sets a field age to 30 in a hash named user:1?
easy
A. SET user:1 age 30
B. HSET user:1 age 30
C. HMSET user:1 age: 30
D. SETFIELD user:1 age 30

Solution

  1. Step 1: Identify command for setting a single field in a hash

    The HSET command sets a field in a hash key.
  2. Step 2: Check other options

    SET is for strings, HMSET is deprecated but similar to HSET, SETFIELD is invalid.
  3. Final Answer:

    HSET user:1 age 30 -> Option B
  4. Quick Check:

    HSET sets hash fields [OK]
Hint: Use HSET to set one field in a hash [OK]
Common Mistakes:
  • Using SET for hash fields
  • Using deprecated HMSET instead of HSET
  • Inventing commands like SETFIELD
3. Given the following Redis commands executed in order:
HSET user:2 name "Alice" age 25
HSET user:2 city "Paris"
GET user:2

What will be the output of the GET user:2 command?
medium
A. null (no value)
B. "Alice"
C. A list of all fields and values in user:2.
D. An error because user:2 is a hash, not a string.

Solution

  1. Step 1: Understand data types and commands

    HSET creates a hash key user:2. GET works only on string keys.
  2. Step 2: Predict command behavior

    Using GET on a hash key causes a type error in Redis.
  3. Final Answer:

    An error because user:2 is a hash, not a string. -> Option D
  4. Quick Check:

    GET on hash key = error [OK]
Hint: GET only works on strings, not hashes [OK]
Common Mistakes:
  • Expecting GET to return hash fields
  • Confusing GET with HGETALL
  • Assuming null means no error
4. You have this Redis command sequence:
HSET user:3 name "Bob" age 40
SET user:3 "simple string"

What problem will occur and how to fix it?
medium
A. Error because user:3 key type conflicts; delete key before SET.
B. No problem; Redis allows both hash and string on same key.
C. The SET command will overwrite the hash silently.
D. The HSET command will fail because key exists as string.

Solution

  1. Step 1: Understand Redis key type rules

    A key can only hold one data type at a time. Setting a string on a key that is a hash causes an error.
  2. Step 2: Identify fix

    To set a string on the same key, delete the existing hash key first using DEL.
  3. Final Answer:

    Error because user:3 key type conflicts; delete key before SET. -> Option A
  4. Quick Check:

    Key type conflict = error, DEL key first [OK]
Hint: Delete key before changing type to avoid errors [OK]
Common Mistakes:
  • Assuming Redis allows multiple types on one key
  • Expecting SET to overwrite hash without error
  • Not deleting key before changing type
5. You want to store user profiles with fields name, age, and email in Redis. You also want to efficiently update individual fields without rewriting the whole object. Which approach is best and why?
hard
A. Store each user as multiple string keys, one per field, like user:1:name, user:1:age.
B. Store each user as a string with JSON and rewrite entire string on update.
C. Store each user as a hash with fields for name, age, and email for easy updates.
D. Store all users in one big hash with user IDs as fields and JSON strings as values.

Solution

  1. Step 1: Consider update efficiency

    Updating individual fields is easiest with hashes because you can update one field without rewriting others.
  2. Step 2: Compare options

    Strings with JSON require rewriting whole string. Multiple string keys increase complexity. One big hash mixes users and complicates access.
  3. Final Answer:

    Store each user as a hash with fields for name, age, and email for easy updates. -> Option C
  4. Quick Check:

    Hashes = efficient field updates [OK]
Hint: Use hashes for objects needing partial field updates [OK]
Common Mistakes:
  • Using strings with JSON and rewriting whole data
  • Splitting fields into many string keys unnecessarily
  • Storing all users in one hash causing complexity
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard