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实际在内存中占用的空间大小。