新闻详情

新闻详情

首页 / 资讯中心 / 详情

Redis命令:HGET

发布时间:2026/9/26 16:29:24来源:尧图网络
Redis命令:HGET
Redis HGET 命令详细教程HGET读取 Hash 中指定字段的值。它是 Hash 最基础的读取命令一次只读取一个字段字段或 Key 不存在时返回空值Null。资料合集https://pan.quark.cn/s/10e98d308913、https://pan.quark.cn/s/f56bc69c5338一、概览与语法HGET key field项目说明数据类型Hash支持版本Redis 2.0.0 起keyHash 的 Keyfield一个完整字段名不支持通配符返回值字段值的字符串字段或 Key 不存在时为空值时间复杂度O(1)ACLread、hash、fast命令标记readonlyRESP2 使用空批量字符串Nil表示不存在RESP3 使用 Null客户端通常转换为None、nil或null。命令本身不区分“Key 不存在”和“字段不存在”两种情况返回相同的空值。$TRAE_REF二、基础示例以下命令在测试实例的 redis-cli 中执行。文中结果是预期说明未实际连接 Redis 运行。DEL tutorial:{hget}:user tutorial:{hget}:missing HSET tutorial:{hget}:user name Alice city Shanghai empty HGET tutorial:{hget}:user name HGET tutorial:{hget}:user empty HGET tutorial:{hget}:user age HGET tutorial:{hget}:missing name EXISTS tutorial:{hget}:user预期结果读取 name 返回Alice读取 empty 返回空字符串两者都是成功读取读取不存在的 age 返回(nil)在缺失 Key 上读取也返回(nil)EXISTS 返回1说明缺失字段的读取不会影响 Key 的存在性。三、空字符串与空值的区别这是 HGET 最容易出错的地方。字段值为空字符串表示字段存在但内容为空返回空值表示字段或 Key 不存在。两者在 Redis 协议层面不同但部分客户端解码后都表现为“假值”容易混淆。状态HGET 结果HEXISTS说明字段存在值为AliceAlice1正常读取字段存在值为空字符串1字段存在内容为空字段不存在空值0字段缺失Key 不存在空值0整个 Hash 缺失字段存在值为001文本0也是有效值字段存在值为nullnull1Redis 不把该文本当空值HSET tutorial:{hget}:user flag 0 HGET tutorial:{hget}:user flag HEXISTS tutorial:{hget}:user flag HGET tutorial:{hget}:user absent HEXISTS tutorial:{hget}:user absent前两次依次返回0和1后两次依次返回(nil)和0。在业务代码里应显式判断是否为 NonePython或 nullJava而不是用if value之类的真值判断否则值为0或时会被误判。四、错误类型与边界情况场景行为Key 是 String、List、Set 等非 Hash 类型报 WRONGTYPE 错误而不是返回空值字段名为空字符串合法使用HGET key 读取字段名为星号按字面字段名*处理不是通配匹配字段名大小写不同视为不同字段name 与 Name 互不相通Key 已到期视作不存在返回空值参数个数不对报语法错误HGET 只接受 key 与 field 两个参数SET tutorial:{hget}:wrong text HGET tutorial:{hget}:wrong name上述命令会报 WRONGTYPE。需要先确认类型时可执行 TYPE但要注意 TYPE 与 HGET 是两次独立调用中间可能有其他客户端改动该 Key。五、字段过期与 TTLHGET 是只读命令不会刷新整个 Key 的 TTL也不会刷新字段自身的 TTL。在 Redis 7.4 及以后字段可以单独设置过期时间此时字段到期后 HGET 会返回空值而同一 Hash 的其他字段仍可正常读取。DEL tutorial:{hget}:ttl HSET tutorial:{hget}:ttl stable yes temporary yes HEXPIRE tutorial:{hget}:ttl 2 FIELDS 1 temporary HGET tutorial:{hget}:ttl temporary及时执行时最后一次读取返回yes。等待超过 2 秒后再读取 temporary 会返回空值而 stable 仍为yes。因此“刚读到值”不代表后续仍存在需要长期有效的数据不应依赖临期字段。六、客户端示例前提为已安装 redis-py 并准备好本地测试实例。redis-py 的hget(name, key)中第二个参数是 Hash 字段名不是另一个 Redis Key无论是否启用解码字段缺失时都返回 None。importredis rredis.Redis(hostlocalhost,port6379,decode_responsesTrue)ktutorial:{hget}:pythontry:r.delete(k)r.hset(k,mapping{name:Alice,empty:,count:0})print(r.hget(k,name))# Aliceprint(r.hget(k,empty))# 空字符串不是 Noneprint(r.hget(k,count))# 0print(r.hget(k,absent))# Nonevaluer.hget(k,empty)print(valueisNone)# False字段存在print(value)# True内容为空ifr.hget(k,absent)isNone:print(字段不存在或 Key 不存在)finally:r.delete(k)r.close()Java 客户端Jedis示例返回 null 表示字段或 Key 不存在try(JedisjedisnewJedis(localhost,6379)){jedis.hset(tutorial:{hget}:java,name,Alice);Stringvaluejedis.hget(tutorial:{hget}:java,name);System.out.println(value);// AliceSystem.out.println(jedis.hget(tutorial:{hget}:java,x));// nulljedis.del(tutorial:{hget}:java);}七、与相近命令的区别命令读取范围说明HGET单个字段O(1)最常用HMGET多个指定字段一次返回多个值缺失字段对应空值HGETALL全部字段与值O(N)大 Hash 慎用HKEYS / HVALS全部字段名 / 全部值只取一侧HSTRLEN单个字段值的长度只返回长度不返回值HGETDEL读取并删除字段Redis 8.0 起适合一次性消费HGETEX读取并可选设置字段 TTLRedis 8.0 起读取同时续期需要多个字段时用 HMGET 一次取回比循环 HGET 更省往返但 HMGET 的结果同样不是原子快照仍可能与其他写入交错。八、原子性与常见模式“先 HGET 判断再决定是否写入”是典型的非原子流程两次调用之间其他客户端可能已经修改该字段。仅当字段不存在才写入应使用 HSETNX需要按旧值条件更新应使用 Lua 脚本或带 WATCH 的事务设计。单条 HGET 本身是原子的它返回的是执行瞬间的值。HGET 常用于读取对象属性、缓存字段、配置项。注意 HGET 返回的是字符串数值字段需要业务自行解析解析失败不代表 Redis 出错。不要用 HGET 遍历整个 Hash也不要为了取一个字段而调用 HGETALL。九、练习、排错与总结练习新建tutorial:{hget}:exercise写入 a1、b执行 HGET 读取 a 与 b预期分别得到1与空字符串读取 c预期为空值用 HEXISTS 分别验证三者预期为 1、1、0最后用 EXISTS 确认 Key 仍然存在。排错要点返回空值时用 HEXISTS 区分“字段不存在”还是“Key 不存在”报 WRONGTYPE 时用 TYPE 检查数据类型读到0却走了“空分支”说明业务用了真值判断unknown command 的情况不存在于 2.0 以上版本应检查是否拼写错误或客户端封装方法名不对。清理使用DEL tutorial:{hget}:user tutorial:{hget}:missing tutorial:{hget}:wrong tutorial:{hget}:ttl tutorial:{hget}:exercise。速记单字段读取、O(1)、只读不续期、空字符串与空值必须区分。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Codex++ 使用踩坑记录:API 模式下如何用 TaoToken 解锁插件功能 2026/9/26 17:08:38

Codex++ 使用踩坑记录:API 模式下如何用 TaoToken 解锁插件功能

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Atlas 300V Pro 24G 部署 YOLO 全流程:从硬件认知到推理优化 2026/9/26 17:08:32

Atlas 300V Pro 24G 部署 YOLO 全流程:从硬件认知到推理优化

最近做边缘视频分析项目,手头拿到一张 Atlas 300V Pro 24G 加速卡,要把 YOLO 目标检测跑上去。从拆包装到第一帧检测框正常画出来,前后折腾的时间比预想中多不少。网上关于这张卡的信息很零散,尤其在“atlas 部署 yolo”这个方向&…

阅读更多 →
Unity Addressables构建全流程:从分组配置到产物验证的实用指南 2026/9/26 17:08:25

Unity Addressables构建全流程:从分组配置到产物验证的实用指南

这个系列写到这里,前几篇我们把Asset Group划分、Addressable Assets条目的设置思路都过了一遍,也是时候碰一碰最让人心里打鼓的环节了——构建(Build)。说实话,在我接触过的Unity团队里,能把加载和释放写顺…

阅读更多 →
企业微信原生API如何打通全链路裂变:从回调接口到自动标签实操指南 2026/9/26 17:08:19

企业微信原生API如何打通全链路裂变:从回调接口到自动标签实操指南

从“个人微信做私域”切换到“企业微信做私域”的团队越来越多,但真正把裂变跑通的却没几个。大部分人卡在同一个地方:企业微信的客户数据是分散的,加了好友不等于能自动跟进,发了群公告不等于能沉淀标签,弄了一堆裂变…

阅读更多 →
Claude Code Skills实战指南:从安装配置到API报错排查 2026/9/26 17:08:19

Claude Code Skills实战指南:从安装配置到API报错排查

做 AI 编程这块的朋友,最近应该都注意到一个事:Claude Code 从单纯的命令行助手,开始往“带技能”的方向发展了。这个 Skills 扩展机制刚出来的时候我还没太当回事,直到自己在两个项目里连续踩了上下文失控和 API 调用混乱的坑&am…

阅读更多 →
UE5角色动画不播放排查指南:从骨骼网格体到动画蓝图的链路解析 2026/9/26 17:08:19

UE5角色动画不播放排查指南:从骨骼网格体到动画蓝图的链路解析

遇到“UE5角色动画不播放”这个问题的人,十个里有八个第一反应是“我是不是哪里没勾选?”剩下两个直接开始怀疑人生。说实话,我在项目里前前后后撞上这个问题不下十次,每次原因都不一样,但把它们放在一起看&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉