六、Redis的Hash结构数据

本文详细介绍了 Redis 中的 Hash 数据结构及其应用场景。Hash 类似于 Java 的 Map<String,Map<String,String>>,适用于存储对象。文章列举了 HSET、HGET、HMSET 等常用命令的操作方法和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概述

Redis的Hash结构类似于Java中的Map<String,Map<String,Stgring>>,键是字符串,值是另一个映射。结构如图:
这里写图片描述
因此Hash结构很适合用来存储对象。
这里的键相当于对象名称,字段类似对象中的属性名、值就类似对象的属性值

2、常用命令

2.1、 HSET、HSETNX和HGET(添加、获取)

- HSET
- 介绍:
这里写图片描述
1)Redis Hset 命令用于为哈希表中的字段赋值 。
2)如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
3)如果字段已经存在于哈希表中,旧值将被覆盖。

  • 返回值:
    如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0

  • 示例:
    这里写图片描述

- HSETNX
这里写图片描述
- 注意:
Hsetnx 命令用于为哈希表中不存在的的字段赋值 。
1)如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
2)如果字段已经存在于哈希表中,操作无效。
3)如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

与HSET的区别在于,当字段存在时,HSET会覆盖,HSETNX不做任何操作

  • 返回值:
    设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。

  • 示例:

这里写图片描述

- HGET

  • 介绍:
    这里写图片描述
    Hget 命令用于返回哈希表中指定字段的值。

  • 返回值:
    返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil

  • 示例:
    这里写图片描述

2.2、HEXISTS(是否存在)

这里写图片描述
- 基本语法:
HEXISTS KEY_NAME FIELD_NAME
- 返回值:
如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
- 示例:

这里写图片描述

2.3、HMSET和HMGET(批量的添加、获取)

  • 基本语法
    这两个命令与MSET和MGET类似,都是批量的添加和获取
    Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。
    这里写图片描述
    这里写图片描述
  • 返回结果:
    包含多个给定字段关联的值的列表,表值的排列顺序和指定字段的请求顺序一样。如果指定的字段不存在于哈希表,那么返回一个 nil 值。

  • 示例:
    这里写图片描述

2.4、HGETALL、HKEYS、HVALS(查询全部)

这里写图片描述
返回值:
指定key 的所有字段的名及值。返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍
示例:
这里写图片描述

这里写图片描述
示例:
这里写图片描述

这里写图片描述

注意:这个命令不是HVALUES,而是HVALS,是value 的缩写:val
示例:
这里写图片描述

2.5、HDEL(删除)

Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
这里写图片描述
语法:
HDEL key field1 [field2 … ]
返回值:
被成功删除字段的数量,不包括被忽略的字段
示例:
这里写图片描述

2.6、HINCRBY(自增)

这里写图片描述
- 注意:
1)Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。
2)增量也可以为负数,相当于对指定字段进行减法操作。
3)如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
4)如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
5)对一个储存非数字值的字段执行 HINCRBY 命令将造成一个错误。
- 语法:
HINCRBY key field amount
- 返回值:
执行 HINCRBY 命令之后,哈希表中字段的值。

  • 示例:
    这里写图片描述

2.7、HLEN(字段数量)

这里写图片描述

  • 返回值:
    哈希表中字段的数量。 当 key 不存在时,返回 0 。

  • 示例:
    这里写图片描述

### Redis 中的 Hash 数据结构 #### 定义与基本概念 Hash 是一种键值对集合的数据结构,在 Redis 中,它允许存储多个字段(field)及其对应的值(value)。这种数据结构非常适合用于表示对象属性或者一组关联关系。例如,可以用一个哈希来保存用户的个人信息,其中字段可能是 `name`、`age` 和 `email` 等。 RedisHash 类型具有轻量级的特点,当其内部只包含少量的小字符串时,会采用更高效的内存存储方式[^1]。 --- #### 存储特点 - **紧凑性**:如果 Hash 结构中的字段较少且值较短,则 Redis 会通过特殊优化机制减少内存占用。 - **灵活性**:支持多种类型的数据作为字段值,包括但不限于字符串、数字以及 JSON 或 XML 格式的复杂数据。 - **大小限制**:虽然理论上单个 Hash 可以容纳大量字段,但为了性能考虑,建议控制在一个合理范围内[^2]。 --- #### 基本操作命令 以下是常用的针对 Redis Hash 数据结构的操作: ```bash HSET key field value # 设置指定字段的值 HGET key field # 获取指定字段的值 HMSET key field1 value1 ...# 批量设置多个字段及对应值 (注意此方法已被弃用, 推荐使用 HSET 多次调用替代) HMGET key field1 [field2...]# 同时获取多个字段的值 HEXISTS key field # 判断某个给定字段是否存在该散列里面 HDEL key field [field ...] # 删除一个或多个哈希表字段 HLEN key # 返回哈希表中字段的数量 HKEYS key # 查找所有匹配的字段名称列表 HVALS key # 获得所有的值组成的数组形式的结果集 HGETALL key # 得到整个哈希表的内容(即键值对的形式返回), 对于大数据量不推荐频繁使用因为效率低下. ``` 上述命令提供了全面的功能覆盖从简单存取到批量处理的需求[^3]。 --- #### 应用场景实例分析 假设我们需要维护一系列商品的信息,每件商品都有自己的 ID 并附带若干描述性的参数比如价格 (`price`)、库存数量(`stock_count`)等。此时利用 RedisHash 就非常合适: - 商品信息更新变得极为简便只需执行一次写入即可完成多维度同步修改; - 查询特定商品详情也无需额外解析过程直接读取出所需部分即可满足业务需求; 另外还可以扩展至社交网络领域记录用户资料亦或是缓存系统里临时保留动态生成页面片段等等均能体现出它的价值所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值