Redis 7.x 系列【8】数据类型之哈希(Hash)
有道无术,术尚可求,有术无道,止于术。
本系列Redis 版本 7.2.5
源码地址:https://gitee.com/pearl-organization/study-redis-demo
文章目录
- 1. 概述
- 2. 常用命令
- 2.1 HSET
- 2.2 HGET
- 2.3 HDEL
- 2.4 HEXISTS
- 2.5 HGETALL
- 2.6 HKEYS
- 2.7 HLEN
- 2.7 HVALS
- 3. 应用场景
1. 概述
Redis Hash 是一个键值对集合,是一个 string 类型的 field(字段) 和 value(值) 的映射表,类似 Java 里面中的 Map<String,Object>,特别适合用于存储对象。

2. 常用命令
Hash 相关的所有命令:
| 命名 | 描述 |
|---|---|
| HDEL | 用于删除哈希表中一个或多个字段 |
| HEXISTS | 用于判断哈希表中字段是否存在 |
| HEXPIRE | 设置一个或多个字段的过期时间,秒为单位 |
| HEXPIREAT | HEXPIREAT具有与HEXPIRE相同的效果和语义,但它没有指定TTL(生存时间)的秒数,而是使用Unix时间戳(以秒为单位) |
| HEXPIRETIME | 给定key字段将在该时间点过期,返回自Unix时间戳(以秒为单位) |
| HGET | 获取存储在哈希表中指定字段的值 |
| HGETALL | 获取在哈希表中指定 key 的所有字段和值 |
| HINCRBY | 为存储在 key 中的哈希表指定字段做整数增量运算 |
| HINCRBYFLOAT | 为存储在 key 中的哈希表指定字段值加上指定浮点数增量值 |
| HKEYS | 获取存储在 key 中的哈希表的所有字段 |
| HLEN | 获取存储在 key 中的哈希表的字段数量 |
| HMGET | 用于获取存储在 key 中的哈希表字段的值 |
| HMSET | 用于设置存储在 key 中的哈希表字段的值 |
| HPERSIST | 删除 key字段上现有的过期时间 |
| HPEXPIRE | 与HEXPIRE类似,以毫秒为单位 |
| HPEXPIREAT | 与HEXPIRE类似,使用Unix时间戳 |
| HPEXPIRETIME | 与HEXPIRETIME具有相同的语义,使用Unix时间戳(以毫秒为单位) |
| HPTTL | 与HTTL一样,返回具有过期设置的字段的剩余TTL(生存时间),但以毫秒而不是秒为单位 |
| HRANDFIELD | 随机获取字段和值 |
| HSCAN | 返回的每个元素都是一个元组,每一个元组元素由一个字段和值组成 |
| HSET | 为哈希表中的字段赋值 |
| HSETNX | 用于为哈希表中不存在的的字段赋值 |
| HSTRLEN | 返回字段关联的值的字符串长度,如果键或字段不存在,则返回0 |
| HTTL | 返回具有过期设置的字段的剩余TTL(生存时间),秒为单位 |
| HVALS | 用于获取哈希表中的所有值 |
2.1 HSET
HSET 命令用于为存储在 key 中的哈希表的 field 字段赋值 value 。只有被修改返回0 ,有增加返回增加的 field 个数。
注意事项:
- 如果哈希表不存在,一个新的哈希表被创建并进行
HSET操作。 - 如果字段(
field)已经存在于哈希表中,旧值将被覆盖。 - 从
Redis 4.0起,HSET可以一次设置一个或多个field/value对。
基本语法:
HSET key field value [field value ...]
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field1 "Hello" field2 "world" field3 "!"
(integer) 2
redis> HGET myhash field1
"Hello"
2.2 HGET
HGET 命令用于返回哈希表中指定字段 field 的值,如果给定的字段或 key 不存在时,返回 nil 。
示例:
redis> HSET myhash field1 "foo"
(integer) 1
# 字段存在
redis> HGET myhash field1
"foo"
# 字段不存在
redis> HGET myhash field2
(nil)
2.3 HDEL
HDEL 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。 如果 key 不存在,会被当作空哈希表处理并返回 0。
基本语法:
HDEL key field [field ...]
示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
2.4 HEXISTS
HEXISTS 命令用于查看哈希表的指定字段 field 是否存在。
返回值:
1:哈希表含有给定字段field。0:哈希表不含有给定字段,或key不存在。
基本语法:
HEXISTS key field
示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
2.5 HGETALL
HGETALL 命令用于返回存储在 key 中的哈希表中所有的字段和值。在返回值里,紧跟每个字段之后是字段的值,所以返回值的长度是哈希表大小的两倍。
基本语法:
HGETALL key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
2.6 HKEYS
HKEYS 返回存储在 key 中哈希表的所有字段。在返回值里,紧跟每个字段之后是字段的值,所以返回值的长度是哈希表大小的两倍。
基本语法:
HKEYS key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
2.7 HLEN
HLEN 命令用于获取哈希表中字段的数量,当 key 不存在时,返回 0 。
基本语法:
HLEN key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
2.7 HVALS
HVALS 命令返回哈希表所有字段值, 当 key 不存在时,返回空表。
基本语法:
HVALS key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"
3. 应用场景
Hash 数据结构查找快、结构灵活,非常适用于存储一些结构化数据,作为数据库缓存提高读写能力。比如登录用户信息、系统参数信息、配置信息等,同时也支持计数器相关功能。
例如,系统的一些配置参数,都是键值对,适合使用Hash 存储:

例如,存入两个登录页面需要查询的配置参数:
localhost:0>HMSET sys:params login_enabled_dingding true login_enabled_wx false
"OK"
可视化界面显示如下:

可以快速查询配置参数:
localhost:0>HGET sys:params login_enabled_dingding
"true"
相关文章:
Redis 7.x 系列【8】数据类型之哈希(Hash)
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 HSET2.2 HGET2.3 HDEL2.4 HEXISTS2.5 HGETALL2.6 HKEYS2.7 HLE…...
jetson 安装 Rustdesk失败
报错: rustdesk depends on gstreamer1.0-pipewire; however: Package gstreamer1.0-pipewire is not installed. 原因: 对于rustdesk,其1.2.3 版需要gstreamer1.0-pipewire软件包,但是此软件包仅适用于 Ubuntu 22.04、22.10、23.04 和 2…...
Vue原生写全选反选框
效果 场景:Vue全选框在头部,子框在v-for循环内部。 实现:点击全选框,所有子项选中,再次点击取消;子项全选中,全选框自动勾选,子项并未全选,全选框不勾选;已选…...
typescript学习回顾(三)
今天继续来分享ts的相关概念,枚举,ts模块化,接口和类型兼容性 ts的扩展类型:类型别名,枚举,接口和类 枚举 基础概念 枚举通常用于约束某个变量的取值范围。当然字面量和联合类型配合使用,也可…...
算尽天下财,铸就大明梦 —— 大明钱算子夏元吉的传奇一生
仕途生涯开始:洪武二十三年(1390年),夏元吉因精通《诗经》,由湖广乡荐参加礼部组织的会试,虽未中举,但他并未气馁,反而更加努力地学习。洪武二十四年(1391年)…...
openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 二(51-)
环境:OpenCV3.2.0 VS2015 51、Mean-Shift算法分割图像 cv::pyrMeanShiftFiltering() 参考链接:【从零学习OpenCV 4】分割图像——Mean-Shift分割算法 Mean-Shift算法又被称为均值漂移法,是一种基于颜色空间分布(彩色图像的像素值)的图像分割…...
读AI新生:破解人机共存密码笔记13有益机器
1. 标准模型 1.1. 我们能控制一个从外太空来的超级智能实体的概率几乎为零 1.2. 随着根据标准模型设计的机器变得更加智能,以及它们的行动范围遍及全球,关闭机器这种方法越来越不可行 1.2.1. 机器将会追求它们自己的目标,无论目标错得多么…...
Spring Boot中使用Swagger生成API文档
Spring Boot中使用Swagger生成API文档 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在现代的软件开发中,良好的API文档是团队协作和开发效率不可或…...
解决 macOS 中“无法验证开发者”的问题
解决 macOS 中“无法验证开发者”的问题 在使用 macOS 系统时,你可能会遇到一个常见的问题:当你尝试安装或打开某些应用程序时,系统会弹出一个警告,提示“无法验证开发者”。这通常发生在从非官方 App Store 下载的应用程序上。本…...
Emp.dll文件丢失?理解Emp.dll重要性与处理常见问题
在繁多的动态链接库(DLL)文件中,emp.dll 可能不是最广为人知的,但在特定软件或环境中,它扮演着关键角色。本文旨在深入探讨 emp.dll 的功能、重要性以及面对常见问题时的解决策略。 什么是 emp.dll? Emp.d…...
知识平台管理系统设计
知识平台管理系统设计是一个综合性的过程,旨在为企业或组织提供一个高效、便捷的知识管理解决方案。以下是知识平台管理系统设计的详细阐述: 一、设计目标和原则 1、设计目标:设计一款功能强大、易于使用、支持多种知识形式分类和搜索的知识管…...
Python 中字符串修饰符
1. 原始字符串 (Raw String) - r 或 R 使用 r 或 R 前缀,可以告诉 Python 字符串中的所有反斜杠都是普通字符,而不是转义字符。这在处理文件路径、正则表达式等情况下非常有用。 path rC:\new_folder\test.txt # 原始字符串2. 格式化字符串 (Formatt…...
红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全RBCD资源Operators组成员HTLMRelay结合
红队内网攻防渗透 1. 内网横向移动1.1 横向移动-资源约束委派-利用域用户主机加入1.1.1 利用思路1.1.2 利用条件1.1.3 利用过程1.2 横向移动-资源约束委派-Acount Operators组1.2.1 利用思路:1.2.2 利用条件:1.2.3 利用过程:1.3 横向移动-资源约束委派-CVE结合HTLMRelay1.3.…...
Manjaro Linux系统简介和archlinux哲学
## Manjaro Linux系统简介 Manjaro Linux是一个基于Arch Linux的操作系统,以其用户友好性和滚动更新机制而受到广泛欢迎。它为用户提供了一个易于安装和使用的平台,同时保持了Linux系统的高度定制性和最新的软件特性。 ### Manjaro Linux与Arch Linux的…...
【Windows 常用工具系列 17 -- windows bat 脚本多参数处理】
请阅读【嵌入式开发学习必备专栏】 文章目录 bat 脚本命令行参数使用示例多参数处理使用示例遍历所有参数 bat 脚本命令行参数 在Windows批处理(.bat)脚本中接收命令行参数是一个常见的需求,这样的脚本能够根据提供的参数执行不同的操作。命…...
《Windows API每日一练》6.3 非客户区鼠标消息
上一节我们讨论客户区的鼠标消息,本节我们讨论非客户区鼠标消息。如果鼠标位于窗口内部除客户区外的其他区域,Windows就会向窗口过程发送一个“非客户区”鼠标消息。窗口的非客户区包括标题栏、菜单和窗口滚动条。 本节必须掌握的知识点: 非…...
Http客户端-Feign 学习笔记
作者介绍:计算机专业研究生,现企业打工人,从事Java全栈开发 主要内容:技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流(SCI论文两篇) 上点关注下点赞 生活越过…...
【Linux】进程信号_2
文章目录 八、进程信号1. 信号 未完待续 八、进程信号 1. 信号 除了可以使用 kill 命令和键盘来生成信号,我们也可以使用系统调用来生成信号。 kill函数可以对指定进程发送指定信号。 使用方法: int main(int argc, char *argv[]) {if (argc ! 3) {c…...
关于五度圈
五度圈简介 五度圈(Circle of Fifths)是一个展示各个调之间关系的图表。顺时针方向,每个调比前一个调高五度。逆时针方向,每个调比前一个调低五度。五度圈不仅展示了调性之间的关系,还能帮助你理解和记忆音符之间的关…...
电脑突然提示dll文件丢失,怎么选择正确的恢复方法?
电脑突然提示dll文件丢失?其实当你的电脑使用久了,出现这种dll文件丢失是非常的正常的,毕竟你总会有不恰当的操作吧?这些操作都是会导致dll文件丢失的。丢失了,我们直接进行相关的修复就好了,还是比较简单的…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
