Redis Hash 类型详解
Redis 的哈希(Hash)类型是键值对的集合,字段与值均支持字符串或数字。它非常适合存储对象类数据,如用户信息、配置项等。其底层通过压缩列表或哈希表优化存储,空间利用率高且查询效率快,支持单字段或多字段的增删改查、存在性判断以及原子自增操作。
在 Redis 中,虽然整体结构也是 KV 形式,但 Hash 内部将 Key 替换为 Field,形成二级映射。下面我们将深入探讨 Hash 的核心指令及其使用场景。
基础读写指令
hset
用于设置哈希表中指定字段的值。如果字段已存在,则更新该字段的值;如果不存在,则创建新字段。
hset key field value
一个 Key 下可以包含多个 Field,每个 Field 对应唯一的 Value。执行 hset 时,若 Field 已存在,Value 会被覆盖。
hget
通过指定的 Key 和 Field 获取对应的 Value。注意,该命令仅支持单次获取单个字段的值。
hget key field
如果需要批量获取多个字段的值,后续会介绍专门的命令。
hdel
删除哈希表中指定的一个或多个字段及其对应的值。需要注意的是,删除字段不会直接删除整个 Key,除非该 Key 下所有字段都被移除。
hdel key field [field ...]
hkeys / hvals
这两个命令分别用于获取 Key 下的所有字段名或所有值。
- hkeys:返回 Key 对应的全部字段列表。
- hvals:返回 Key 对应的全部值列表。
hkeys key
hvals key
注意:
hkeys不支持通配符匹配多个哈希键,只能针对具体的 Key 名操作。
hgetall
一次性获取 Key 下所有的字段和值。这相当于 hkeys 和 hvals 的结合体。
hgetall key
性能提示:在生产环境中,对于大 Key 的 hgetall 操作需格外谨慎。由于 Redis 是单线程模型,如果哈希表中的数据量过大,该命令会阻塞其他请求,导致服务延迟甚至卡顿。建议在使用前评估数据规模。
统计与存在性检查
hexists
判断某个字段是否存在于指定的 Key 中。存在返回 1,不存在返回 0。
hexists key field
hlen
返回 Key 下字段的数量。如果 Key 不存在,则返回 0。
hlen key
原子操作与特殊写入
hsetnx
仅在字段不存在时设置值。如果字段已存在,则不执行任何操作并返回 0。
hsetnx key field value
这常用于防止重复写入或实现简单的锁机制。
hincrby / hincrbyfloat
用于对字段值进行数值增减操作。
- hincrby:支持整数类型的加减。
- :支持浮点数类型的加减。


