一、命令

1. 设置值

hset key field value
hset user1 name tom
设置成功返回1 反之返回0 
同样,也有hetnx命令,用于在键不存在时使用

2. 获取值

hget key field
hget user1 name 会返回tom
如果键或者field不存在,则会返回nil

3. 删除field

hdel key field [field ...]
hdel 会删除一个或多个field ,返回结果为成功删除field的个数
hdel user1 name

4. 计算field个数

hlen key 

5. 批量设置或获取field-value

hmget key field [field ...]
hmset key field value [field value ...]

6. 判断field是否存在

hexists key field
hexists user1 name 存在时返回1 不存在返回0

7. 获取所有field

hkeys key

8. 获取所有value

hvals key

9. 获取所有的field-value

hgetall key

10. hincrby hincrbyfloat

hincrby key field
hincrbyfloat key field

11. 计算value字符串长度(Redis3.2以上)

hstrlen key field

二、内部编码

1. ziplist(压缩列表)

  • 当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀

2. hashtable(哈希表)

  • 当哈希类型无法满足ziplist的条件时,redis会使用hashtable作为hash的内部实现,因为此时ziplist的读写效率会下降,而hashtable的读写效率为O(1)

三、使用场景

1. 关系数据库

可以把关系数据库的一条记录,转化为一个key,然后该记录的每一列名,对应key里面的field,列的值对应value