首页/数据/数据库速查/HEXISTS / HLEN 存在性与字段数
Redis 命令96 条

HEXISTS / HLEN 存在性与字段数

HEXISTS 判断字段是否存在(1/0),HLEN 返回字段总数;两者都是 O(1),适合做前置校验与容量判断。

数据库速查数据更新于 2026-10-13

字段存在性与字段数

HEXISTS 判断 Hash 中的某个字段是否存在,返回 1 或 0;HLEN 返回字段总数。两者都是 O(1),适合做写入前置校验与容量判断。需要注意的是键不存在时 HEXISTS 返回 0、HLEN 返回 0,与「键存在但字段为空」并不区分——Redis 里也不存在空 Hash,最后一个字段被删除后键会随之消失。

基本信息

适用Redis 2.0 及以上,Hash 类型命令
复杂度均为 O(1)
键不存在时HEXISTS 返回 0,HLEN 返回 0
相关命令EXISTS 判键、HSTRLEN 看字段值长度、HGETALL 取全部字段

示例与边界

示例与边界
HSET user:1001 name alice age 30 city hangzhou   # 建一个三字段 Hash
HEXISTS user:1001 name                           # 1:字段存在
HEXISTS user:1001 weibo                          # 0:字段不存在
HLEN user:1001                                   # 3:字段总数
HEXISTS user:9999 name                           # 0:键不存在也返回 0
HLEN user:9999                                   # 0
EXISTS user:1001                                 # 1:判断「键」是否存在要用 EXISTS
HSTRLEN user:1001 name                           # 5:字段值的字节长度

命令与返回值读法

命令返回边界情况
HEXISTS key field1 存在 / 0 不存在键不存在同样返回 0,无法区分
HLEN key字段个数键不存在返回 0
EXISTS key1 存在 / 0 不存在判断键本身,不涉及字段
HSTRLEN key field字段值的字节长度字段不存在返回 0
HGETALL key全部字段与值大 Hash 上会一次返回大量数据,慎用

典型使用场景

  • 写入前校验字段是否已存在,避免覆盖有效数据
  • 容量治理:HLEN 接近约定上限时触发拆分或清理
  • 判断键是否初始化,配合 EXISTS 与 HLEN 组合使用
  • 统计维度基数:按 Hash 字段数评估单键规模
  • 排查「读不到字段」,先确认键与字段分别是否存在
HEXISTS 与 HSET 是两条独立命令,非原子组合在并发下会互相覆盖;需要「不存在才写」时用 HSETNX,或在 Lua 脚本里把判断与写入合成一步。
HLEN 为 0 只能说明键不存在或没有字段,而 Redis 不会保留空 Hash:删掉最后一个字段后键即消失,因此 HLEN 为 0 实际等价于键不存在。

规模治理相关命令

  • HKEYS、HVALS 与 HGETALL 在大 Hash 上会一次返回大量数据,排障时慎用
  • HRANDFIELD 可按数量随机取样,适合抽样核对内容
  • 字段数接近阈值时编码会从 listpack 切换为 hashtable,内存占用随之跳升
  • 需要控制单键规模时按业务维度拆成多个 Hash,而不是继续往一个键里写

易错点

  • 用 HLEN 为 0 判断键是否不存在:语义上确实成立,但可读性差,判键应直接用 EXISTS
  • 把 HEXISTS 的 0 当成「键不存在」:字段缺失与键缺失都会返回 0,需再查 EXISTS
  • HEXISTS 之后再 HSET 的读改写组合:并发下会互相覆盖,需要 HSETNX 或 Lua 保证原子性
  • 对普通字符串键调用 Hash 命令:返回类型错误,先 TYPE 确认键的实际类型

数据来源与参考

  • Redis 官方文档: HEXISTS
  • Redis 官方文档: HLEN

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌