当前位置: 首页 > article >正文

Redis 核心数据结构(三)——Hash,把一堆字段塞进一个 Key

对象无需再存 JSON 字符串了Hash 让你直接改里面的某个字段不用全量覆盖。本次导航Hash 长什么样像极了 Python 的字典核心命令HSET、HGET、HGETALL、HINCRBY内部编码什么时候省内存什么时候变哈希表哈希字段过期Redis 7.2 的HEXPIRE告别整 Key 过期实战场景用户信息、对象缓存、购物车Hash vs String 存 JSON谁更香发车前提醒先玩熟 String 和 ListHash 就在它们之间。一、Hash 就是 Redis 里的“小字典”在一个 Redis Key 下面再挂一堆 field-value 对。很像编程语言里的字典或者对象。HSET user:1001 name张三age25city北京这样user:1001这个 Key 下有三个字段name、age、city。你可以单独改age不用把整个对象重新存一遍。和 String 存 JSON 的区别String 存 JSON改一个字段你得取出整个 JSON反序列化改完再序列化再SET回去。Hash直接HSET user:1001 age 26一步到位。二、核心命令命令功能HSET key field value [field value ...]设置一个或多个字段HGET key field获取指定字段HGETALL key获取所有字段和值生产环境慎用字段多会慢HMGET key field [field ...]获取多个字段HDEL key field [field ...]删除一个或多个字段HEXISTS key field判断字段是否存在HINCRBY key field increment字段值增加指定整数HINCRBYFLOAT增加浮点数HLEN key获取字段数量HKEYS/HVALS获取所有字段名 / 所有值动手试试# 塞一个用户HSET user:1001 name李四age30balance1000# 单独取年龄HGET user:1001 age# 30# 给余额加 200HINCRBY user:1001 balance200# 返回 1200# 同时获取多个字段HMGET user:1001 name balance# [李四, 1200]# 看看都有哪些字段HKEYS user:1001# [name,age,balance]# 删除年龄字段HDEL user:1001 age HGETALL user:1001# 只剩 name 和 balance注意HGETALL当字段非常多比如几百上千时可能会阻塞 Redis。生产环境多用HMGET取你真正需要的字段。127.0.0.1:6379 HSET user:1001 name李四age 30 balance 1000(integer)1 127.0.0.1:6379 HGET user:1001 age30127.0.0.1:6379 HINCRBY user:1001 balance 200(integer)1200 127.0.0.1:6379 HMGET user:1001 name balance 1)\xe6\x9d\x8e\xe5\x9b\x9b2)1200127.0.0.1:6379 HKEYS user:1001 1)name2)age3)city4)balance127.0.0.1:6379 HDEL user:1001 age(integer)1 127.0.0.1:6379 HGETALL user:1001 1)name2)\xe6\x9d\x8e\xe5\x9b\x9b3)city4)\xe5\x8c\x97\xe4\xba\xac5)balance6)1200三、内部编码Hash 底层有两种存储方式编码条件说明listpack字段和值都比较小数量少连续内存省空间hashtable超过配置阈值默认512字节或64个字段转为真正的哈希表读写 O(1)你可以用OBJECT ENCODING key查看HSET small a1b2OBJECT ENCODING small# listpack# 塞一个长字符串超过阈值HSET big c为给定哈希键的一个或多个字段设置过期时间TTL 或生存时间。您必须至少指定一个字段。字段的 TTL 到期时将自动从哈希键中删除。字段的过期时间仅会被删除或覆盖哈希字段内容的命令清除包括 HDEL 和 HSET 命令。这意味着所有在概念上修改哈希键字段值而不替换为新值的操作都不会影响 TTL。您可以使用 HPERSIST 命令清除 TTL该命令会将哈希字段变回持久字段。请注意使用零 TTL 调用 HEXPIRE/HPEXPIRE 或使用过去的 Unix 时间调用 HEXPIREAT/HPEXPIREAT 将导致哈希字段被删除。HEXPIRE 命令支持一组选项NX -- 对于每个指定字段仅当字段没有过期时间时设置过期时间。XX -- 对于每个指定字段仅当字段已存在过期时间时设置过期时间。GT -- 对于每个指定字段仅当新的过期时间大于当前过期时间时设置过期时间。LT -- 对于每个指定字段仅当新的过期时间小于当前过期时间时设置过期时间。对于 GT 和 LT 选项非易失性字段被视为具有无限 TTL。NX、XX、GT 和 LT 选项是互斥的。您可以将已设置 TTL 的字段作为参数调用 HEXPIRE。在这种情况下生存时间将被更新为新值。OBJECT ENCODING big# hashtable不用你操心Redis 自动升级底层的存储方式。127.0.0.1:6379 object encoding smalllistpack127.0.0.1:6379 object encoding bighashtable四、哈希字段过期Redis 7.4 的神器在老版本里整个 Hash 要么一起活要么一起死。你不能让user:1001的temp_token字段 5 分钟失效而name永久保留。Redis 7.4引入了字段级过期命令如下HEXPIRE key seconds[NX|XX|GT|LT]FIELDS numfields field[field...]参数说明key: 哈希键名称。seconds: TTL以秒为单位。FIELDS numfields field [field …]: 指定字段及其数量。可选参数NX: 仅当字段没有过期时间时设置。XX: 仅当字段已有过期时间时设置。GT: 新的过期时间必须大于当前过期时间。LT: 新的过期时间必须小于当前过期时间。示例# 为不存在的键设置过期时间HEXPIRE no-key20NX FIELDS2field1 field2(nil)# 创建一个哈希键并设置字段HSET examplekey field1hellofield2world(integer)2# 为字段设置 10 秒的过期时间HEXPIRE examplekey10FIELDS3field1 field2 field31)(integer)1# field1 的过期时间成功设置2)(integer)1# field2 的过期时间成功设置3)(integer)-2# field3 不存在返回 -2# 检查哈希键内容HGETALL mykey(empty array)画个图更直观的了解下场景用户登录后存session_id在 Hash 里设置 30 分钟过期同时保留用户基本资料。以前你要单独存一个 String Key现在一个 Hash 搞定。五、实战场景场景1用户信息 / 对象缓存# 存用户资料HSET user:1001 name王五emailwangexample.compoints100# 增加积分HINCRBY user:1001 points50# 修改邮箱只改一个字段HSET user:1001 emailnewwangexample.com# 取出来展示HGETALL user:1001场景2购物车经典案例每个用户的购物车是一个 Hashfield是商品 IDvalue是数量# 用户1001 添加 2个商品1011个商品102HSET cart:1001 prod_1012HINCRBY cart:1001 prod_1021# 增加某种商品数量HINCRBY cart:1001 prod_1011# 现在变成3# 减少数量HINCRBY cart:1001 prod_101-1# 删除商品HDEL cart:1001 prod_102# 查看购物车所有商品HGETALL cart:1001购物车天然适合 Hash商品数量可以单独增减不需要序列化整个数组。场景3配置项 / 属性存储比如存某个服务的开关配置HSET config:service_atimeout30retry3enable_ssl1HGET config:service_atimeout随时改单条配置不用重写整个配置对象。六、Hash vs String 存 JSON对决假设你要存一个用户对象{name:张三,age:25,city:北京}方式存数据改 age读 age内存占用String JSONSET user:1001 {name:...,age:25,...}取出→反序列化→改→序列化→SETGET后解析序列化后的字符串HashHSET user:1001 name 张三 age 25 city 北京HSET user:1001 age 26HGET user:1001 age每个 field 单独存但压缩后更省结论如果你经常单独修改某个字段Hash 完胜。如果你每次都整体读写比如整个对象传给前端String JSON 可能更方便。内存方面小对象 Hash 的编码非常省大对象两者差别不大。推荐对象字段少、频繁单独改 → Hash。对象大、嵌套深、整体读为主 → String JSON。 点关注不迷路如果你看到这儿了欢迎点赞 关注我们下期见

相关文章:

Redis 核心数据结构(三)——Hash,把一堆字段塞进一个 Key

对象无需再存 JSON 字符串了,Hash 让你直接改里面的某个字段,不用全量覆盖。本次导航 Hash 长什么样(像极了 Python 的字典)核心命令:HSET、HGET、HGETALL、HINCRBY内部编码:什么时候省内存,什么…...

代码之外周刊(第期):为什么所有费用都必须付两遍?

引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...

Degrees of Lewdity中文汉化版:终极完整安装与使用指南

Degrees of Lewdity中文汉化版:终极完整安装与使用指南 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...

别再到处找了!STM32CubeMX、IDE、Programmer、Monitor全套工具下载安装与配置保姆级指南

STM32Cube全家桶零基础通关指南:从下载到实战的一站式解决方案 第一次打开ST官网时,我盯着满屏的Cube工具链差点崩溃——MX、IDE、Programmer、Monitor四个核心工具分散在不同页面,每个工具又有多个版本分支。更崩溃的是,好不容易…...

语音翻译质量评估新指标SAN-MT的技术解析

1. 项目背景与核心价值去年参与跨国会议时,我注意到一个有趣现象:当演讲者使用浓重口音的英语时,同声传译的准确率会显著下降。这让我开始思考——现有的机器翻译评估指标是否真的能反映语音翻译场景下的真实质量?传统基于文本的B…...

别再手动打勾了!Word开发工具制作可交互表单(单选框/复选框/下拉框)保姆级教程

Word交互表单制作全攻略:告别低效符号,用ActiveX控件打造专业表单 还在用插入符号的方式制作Word表单吗?每次看到同事手动复制粘贴空心圆和实心圆来"填写"单选框,或是用打钩符号模拟复选框时,我都忍不住想分…...

Thoughtbox:基于Docker与MCP协议的可审计多智能体协作推理引擎

1. 项目概述:一个可审计的多智能体协作推理引擎如果你和我一样,长期在AI应用开发的一线,肯定遇到过这样的困境:让大语言模型(LLM)进行复杂推理时,过程就像一个黑盒。它给出了一个答案&#xff0…...

bp的使用

BP 在 CTF 中的使用BP(Binary Patch)在 CTF(Capture The Flag)竞赛中常用于修改二进制文件的行为,绕过保护机制或直接获取 flag。以下是常见的使用场景和方法:修改关键跳转或条件通过工具如 IDA Pro、Ghidr…...

【Dify 2026缓存架构权威白皮书】:首次公开3层异构缓存协同机制与QPS提升217%实测数据

更多请点击: https://intelliparadigm.com 第一章:Dify 2026缓存架构演进与核心设计哲学 Dify 2026 的缓存体系已从早期的单层 LRU 内存缓存,演进为支持多级协同、语义感知与生命周期自治的混合缓存网格(Hybrid Cache Grid, HCG…...

支付宝异步通知验签:支付安全核心机制解析与开源工具实践

1. 项目概述:一个被忽视的支付安全“守门人” 如果你在开发一个涉及在线支付的网站或应用,无论是电商平台、知识付费还是会员订阅,支付成功后的异步通知(Notify)处理都是整个交易闭环中最关键、也最容易出错的环节。想…...

IDE Eval Resetter:JetBrains IDE试用信息重置技术方案

IDE Eval Resetter:JetBrains IDE试用信息重置技术方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题场景化引入:开发环境连续性中断的技术挑战 在现代软件开发实践中,J…...

拆开看原理:手把手图解电磁炉主板上的‘心脏’(IGBT)与‘大脑’(MCU)是如何协同工作的

拆开看原理:手把手图解电磁炉主板上的‘心脏’(IGBT)与‘大脑’(MCU)是如何协同工作的 当你按下电磁炉的启动键时,这台看似简单的厨房电器内部正上演着一场精密的电子交响乐。作为现代厨房的核心设备&#…...

从Pangu到PolarDB:阿里云XRDMA通信库如何搞定大规模存储系统的RDMA难题?

阿里云XRDMA通信库:破解大规模存储系统RDMA落地难题的工程实践 在分布式存储与数据库领域,网络通信性能始终是决定系统上限的关键因素。当传统TCP协议栈的延迟和吞吐成为瓶颈时,RDMA技术凭借其绕过内核、零拷贝的特性,自然成为高性…...

告别源码编译!给你的ROS功能包做个.deb安装包,团队部署效率翻倍

告别源码编译!ROS功能包.deb化实战指南:团队协作效率革命 在机器人操作系统(ROS)开发中,源码编译曾是每个工程师的必修课。但随着项目规模扩大和团队协作需求增加,反复的catkin_make逐渐暴露出效率瓶颈——…...

OnmyojiAutoScript:阴阳师自动化脚本终极指南,20+任务一键托管解放双手

OnmyojiAutoScript:阴阳师自动化脚本终极指南,20任务一键托管解放双手 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师中重复繁琐的日常任务…...

Halcon算子速查手册:从分类到XLD,这份中文注解帮你告别官方文档

Halcon算子实战指南:从分类到XLD的工业视觉高效开发 工业视觉开发者的效率革命 在自动化检测和机器视觉领域,Halcon作为行业标杆工具库,其强大的算子功能集一直是开发者实现复杂视觉算法的利器。然而面对海量的算子文档,许多工程师…...

JDspyder终极指南:2025年最实用的京东自动化抢购脚本

JDspyder终极指南:2025年最实用的京东自动化抢购脚本 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 还在为抢不到心仪的京东商品而烦恼吗?无论是限量茅…...

保姆级教程:用MATLAB R2023a处理CMEMS高分辨率海洋数据(GLORYS12V1)

MATLAB R2023a实战:CMEMS高分辨率海洋数据处理全流程解析 海洋数据研究正迎来黄金时代。根据国际海洋数据中心的统计,全球海洋观测数据量每年增长超过40%,其中高分辨率再分析数据如CMEMS的GLORYS12V1产品已成为气候研究和海洋预测的重要基础。…...

3个场景告诉你:为什么你需要一个Windows窗口“图钉“

3个场景告诉你:为什么你需要一个Windows窗口"图钉" 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 想象一下这样的场景:你正在写代码,需…...

FineReport FCP认证实战避坑:除了函数和报表,SQL、Tomcat部署这些“送分题”千万别丢分

FineReport FCP认证实战避坑指南:如何高效攻克SQL与部署难题 备考FineReport FCP认证的学员往往会把90%的精力投入到函数和报表设计上,却忽略了那些看似简单实则暗藏玄机的基础环节。去年一位考生在FR模块拿了接近满分,却因为Tomcat部署时的一…...

免费开源键鼠自动化工具KeymouseGo:3分钟掌握高效重复任务处理

免费开源键鼠自动化工具KeymouseGo:3分钟掌握高效重复任务处理 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo …...

Qwen2.5-Coder与TensorRT-LLM前瞻解码优化实践

1. Qwen2.5-Coder与TensorRT-LLM的协同优化实践在当今AI辅助编程领域,大语言模型正逐步改变开发者的工作流。作为这一趋势的代表,Qwen团队最新推出的Qwen2.5-Coder系列模型在代码生成、逻辑推理和错误修复等任务上展现了卓越性能。本文将深入探讨如何通过…...

什么是 Modbus?工业网关如何采集 PLC 和仪表数据

什么是 Modbus?工业网关如何采集 PLC 和仪表数据 文章目录什么是 Modbus?工业网关如何采集 PLC 和仪表数据一、Modbus 是什么?二、为什么工业现场常用 Modbus?1. 协议简单2. 设备支持广泛3. 适合现场数据采集4. 成本较低三、Modbu…...

JetBrains IDE 试用期重置工具:让开发体验持续流畅

JetBrains IDE 试用期重置工具:让开发体验持续流畅 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经遇到过这样的情况:正在专注编码时,IDE突然弹出试用期到期的提醒&a…...

ToastFish:终极碎片化时间单词记忆神器,让摸鱼时间变黄金学习窗口

ToastFish:终极碎片化时间单词记忆神器,让摸鱼时间变黄金学习窗口 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 在快节奏的现代生活中,你是否经常感叹&qu…...

自动评分系统校准:方法与工程实践

1. 自动评分器校准的核心挑战在教育培训、内容审核、创意评价等领域,自动评分系统正发挥着越来越重要的作用。但一个常见痛点在于:算法给出的分数分布往往与人类评价者的偏好分布存在显著差异。上周我参与了一个在线编程作业评分系统的优化项目&#xff…...

Swoole WebSocket+LLM流式响应生产级部署(千万级QPS稳定性验证报告)

更多请点击: https://intelliparadigm.com 第一章:Swoole WebSocketLLM流式响应生产级部署(千万级QPS稳定性验证报告) 在高并发实时 AI 交互场景中,Swoole 的协程 WebSocket 服务与大语言模型(LLM&#xf…...

AI短剧角色一致性怎么检查?一份给新手的发布前清单

AI短剧角色一致性怎么检查?一份给新手的发布前清单 AI 短剧发布前,角色一致性至少要检查 4 件事:脸型是否稳定、服装是否统一、场景是否连贯、镜头是否顺着剧情推进。辰入梦(chenrumeng.cn)可以通过角色库、场景库和自动分镜降低角色漂移&…...

大语言模型工具调用框架:原理与实践指南

1. 大语言模型工具调用框架概述 在人工智能领域,大语言模型(LLM)的工具调用能力正在重塑人机交互的边界。这种技术突破让静态的文本生成模型转变为能够主动连接现实世界的智能代理。想象一下,当你询问天气时,模型不再只是猜测"可能晴天&…...

如何选择最适合您企业的专题片拍摄团队?

在当今这个信息爆炸的时代,企业专题片已成为品牌宣传和形象塑造的重要手段。然而,如何从众多的拍摄团队中挑选出最适合自己企业的合作伙伴,却是一个需要认真考虑的问题。本文将通过分析行业现状、提供实用指南,并结合具体案例&…...