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文件丢失的。丢失了,我们直接进行相关的修复就好了,还是比较简单的…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
