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
HSET key field value [field value ...]

该命令默认返回的是添加/修改field的个数:

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

1
HSETNX key field value [field value ...]

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

1
HGET key field

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

1
HMSET key field value [field value ...]

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

1
HGET key field [field ...]

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

1
HGETALL key

7. 删除某一个key中的一个或多个属性field:

1
HDEL key field [field ...]

该命令默认返回的是删除数量:

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

1
HLEN key

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

1
HEXISTS key field

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

1
HKEYS key

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

12. 将当前key中某个属性field对应的整数值进行增加操作:

1
HINCRBY key field increment

该命令默认返回的是增加后的结果:

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

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

13. 将当前key中某个属性field对应的小数值进行增加操作:

1
HINCRBYFLOAT key field increment

HINCRBYFLOAT命令的特性基本上和HINCRBY命令相同:

三、使用Redis哈希类型的注意事项

1. 大部分的Redis哈希类型的命令的时间复杂度是$O(1)$,少部分命令,例如:

  • HKEYS
  • HVALS
  • HGETALL

这些命令的时间复杂度是$O(n)$,因为它们需要遍历当前key中所有的fields。

2. 哈希类型理论上可以存储$2^{32}-1$个键值对,但是实际上,这个存储上限取决于你的Redis实际在内存中占用的空间大小。


Redis数据类型之哈希类型Hash
https://www.icode504.com/posts/89.html
作者
iCode504
发布于
2025年4月13日
许可协议