# 🔑 Redis `HSET` and Related Hash Commands ## 1. `HSET` * **Purpose**: Set the value of one or more fields in a hash. * **Syntax**: ```bash HSET key field value [field value ...] ``` * **Return**: * Integer: number of fields that were newly added. * **RESP Protocol**: ``` *4 $4 HSET $3 key $5 field $5 value ``` (If multiple field-value pairs: `*6`, `*8`, etc.) --- ## 2. `HSETNX` * **Purpose**: Set the value of a hash field only if it does **not** exist. * **Syntax**: ```bash HSETNX key field value ``` * **Return**: * `1` if field was set. * `0` if field already exists. * **RESP Protocol**: ``` *4 $6 HSETNX $3 key $5 field $5 value ``` --- ## 3. `HGET` * **Purpose**: Get the value of a hash field. * **Syntax**: ```bash HGET key field ``` * **Return**: * Bulk string (value) or `nil` if field does not exist. * **RESP Protocol**: ``` *3 $4 HGET $3 key $5 field ``` --- ## 4. `HGETALL` * **Purpose**: Get all fields and values in a hash. * **Syntax**: ```bash HGETALL key ``` * **Return**: * Array of `[field1, value1, field2, value2, ...]`. * **RESP Protocol**: ``` *2 $7 HGETALL $3 key ``` --- ## 5. `HMSET` (⚠️ Deprecated, use `HSET`) * **Purpose**: Set multiple field-value pairs. * **Syntax**: ```bash HMSET key field value [field value ...] ``` * **Return**: * Always `OK`. * **RESP Protocol**: ``` *6 $5 HMSET $3 key $5 field $5 value $5 field2 $5 value2 ``` --- ## 6. `HMGET` * **Purpose**: Get values of multiple fields. * **Syntax**: ```bash HMGET key field [field ...] ``` * **Return**: * Array of values (bulk strings or nils). * **RESP Protocol**: ``` *4 $5 HMGET $3 key $5 field1 $5 field2 ``` --- ## 7. `HDEL` * **Purpose**: Delete one or more fields from a hash. * **Syntax**: ```bash HDEL key field [field ...] ``` * **Return**: * Integer: number of fields removed. * **RESP Protocol**: ``` *3 $4 HDEL $3 key $5 field ``` --- ## 8. `HEXISTS` * **Purpose**: Check if a field exists. * **Syntax**: ```bash HEXISTS key field ``` * **Return**: * `1` if exists, `0` if not. * **RESP Protocol**: ``` *3 $7 HEXISTS $3 key $5 field ``` --- ## 9. `HKEYS` * **Purpose**: Get all field names in a hash. * **Syntax**: ```bash HKEYS key ``` * **Return**: * Array of field names. * **RESP Protocol**: ``` *2 $5 HKEYS $3 key ``` --- ## 10. `HVALS` * **Purpose**: Get all values in a hash. * **Syntax**: ```bash HVALS key ``` * **Return**: * Array of values. * **RESP Protocol**: ``` *2 $5 HVALS $3 key ``` --- ## 11. `HLEN` * **Purpose**: Get number of fields in a hash. * **Syntax**: ```bash HLEN key ``` * **Return**: * Integer: number of fields. * **RESP Protocol**: ``` *2 $4 HLEN $3 key ``` ## 12. `HSCAN` * **Purpose**: Iterate fields/values of a hash (cursor-based scan). * **Syntax**: ```bash HSCAN key cursor [MATCH pattern] [COUNT count] ``` * **Return**: * Array: `[new-cursor, [field1, value1, ...]]` * **RESP Protocol**: ``` *3 $5 HSCAN $3 key $1 0 ```