Redis数据类型之哈希类型Hash
本文最后更新于:2025年4月13日
想学习更多Redis相关知识,请点击右侧链接查看Redis学习笔记:点我查看
一、Redis哈希类型介绍
Redis的哈希(Hash)类型记录的是多个属性(field)及其对应的值(value)的集合,它本身仍然是键值对(key-value),但是value变为由多个field-value组成的结构,类似Java中的Map<String, Map<String, Object>>,下图是Redis哈希类型存储结构示意图:

应用场景:早期购物车的应用。
- 新增商品使用HSET命令;
- 添加当前商品数量使用HINCRBY命令;
- 获取商品总数HLEN命令;
- 全部选择使用HGETALL命令;
二、Redis哈希类型常用命令
1. 添加和修改key:
| 1 |  | 
该命令默认返回的是添加/修改field的个数:

2. 如果当前key中属性field不存在则创建,存在则不创建:
| 1 |  | 

3. 获取当前的key中属性field对应的value
| 1 |  | 

4. 添加和修改key(该命令已经在Redis 4.0.0以后已过时,推荐使用前面的HSET命令)
| 1 |  | 

5. 批量获取key中多个属性field对应的value
| 1 |  | 

6. 获取当前key所有属性field对应的value:
| 1 |  | 

7. 删除某一个key中的一个或多个属性field:
| 1 |  | 
该命令默认返回的是删除数量:

8. 获取当前key所拥有的属性field的数量:
| 1 |  | 

9. 判断当前key中里面是否存在某个属性field:
| 1 |  | 

10. 获取当前key所有属性field名称:
| 1 |  | 

- 获取当前key所有属性对应的值value:
| 1 |  | 

12. 将当前key中某个属性field对应的整数值进行增加操作:
| 1 |  | 
该命令默认返回的是增加后的结果:

使用HINCRBY也可以执行减少操作,将increment对应的值改成负数即可:

如果key不存在,那么则执行创建操作;如果key存在,而field不存在,此时会创建一个field,并对field的值由0设置为对应的值:

13. 将当前key中某个属性field对应的小数值进行增加操作:
| 1 |  | 
HINCRBYFLOAT命令的特性基本上和HINCRBY命令相同:

三、使用Redis哈希类型的注意事项
1. 大部分的Redis哈希类型的命令的时间复杂度是$O(1)$,少部分命令,例如:
- HKEYS
- HVALS
- HGETALL
这些命令的时间复杂度是$O(n)$,因为它们需要遍历当前key中所有的fields。
2. 哈希类型理论上可以存储$2^{32}-1$个键值对,但是实际上,这个存储上限取决于你的Redis实际在内存中占用的空间大小。