Redis—Hash数据类型及其常用命令详解

文章目录

  • Redis概述
  • Hash类型
  • Hash类型常用命令
    • 1 HSET:添加或者修改hash类型key的field的值
    • 2 HGET :获取一个hash类型key的field的值
    • 3 HMSET:批量添加多个hash类型key的field的值
    • 4 HMGET:批量获取多个hash类型key的field的值
    • 5 HGETALL:获取一个hash类型的key中的所有的field和value
    • 6 HKEYS:获取一个hash类型的key中的所有的field
    • 7 HINCRBY:让一个hash类型key的字段值自增并指定步长
    • 8 HDEL:用于从哈希表中删除一个或多个字段
    • 9 HEXISTS:检查哈希表中指定字段是否存在
    • 10 HLEN:获取哈希表中字段的数量


Redis概述

Redis概述

在这里插入图片描述

Hash类型

  • Redis中的Hash类型可以存储类似于Java中HashMap结构的无序字典,它提供了对单个字段进行CRUD操作的能力。

  • 相比于将整个对象序列化为字符串再存储的String类型,使用Hash类型可以更方便地修改和访问对象的各个字段。

  • 在Hash结构中,每个字段都对应一个值,这使得我们可以针对单个字段进行操作,而不需要反序列化整个对象。这样可以提高效率,并且更加灵活地处理字段的增删改查。


Hash类型常用命令

1 HSET:添加或者修改hash类型key的field的值

在这里插入图片描述
HSET 命令用于将一个或多个字段-值对设置到哈希表中。如果字段已经存在于哈希表中,它的值将被更新。

HSET key field value [field value ...]
  • key:要操作的哈希表键。
  • field:要设置的字段。
  • value:字段对应的值。

返回值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"
redis> HSET myhash field2 "Hi" field3 "World"
(integer) 2
redis> HGET myhash field2
"Hi"
redis> HGET myhash field3
"World"
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "Hi"
5) "field3"
6) "World"
redis> 
  • 当字段是哈希表中的一个新字段时,返回 1。
  • 当字段已经存在于哈希表中,且值被更新时,返回 0。

myhash 的哈希表如下:

myhash:field1: afield2: b

使用 HSET 命令设置新字段和更新字段的值:

HSET myhash field3 c

命令会在 myhash 中设置新字段 field3,其值为 c。由于 field3 是一个新字段,所以命令返回 1。

HSET myhash field2 bb

命令会将 field2 的值更新为 bb。由于 field2 已经存在于哈希表中,所以命令返回 0。


2 HGET :获取一个hash类型key的field的值

在这里插入图片描述
HGET 命令用于获取哈希表中指定字段的值。

HGET key field
  • key:要操作的哈希表键。
  • field:要获取值的字段。

返回值

redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)
redis> 
  • 当字段存在于哈希表中时,返回字段的值。
  • 当字段不存在时,返回 nil
myhash:field1: value1field2: value2field3: value3

使用 HGET 命令获取字段的值:

HGET myhash field2

返回 value2,因为 field2 的值是 value2

HGET myhash field4

返回 nil,因为 field4 不存在于哈希表中。


3 HMSET:批量添加多个hash类型key的field的值

在这里插入图片描述
HMSET 命令用于同时设置哈希表中多个字段的值。

HMSET key field value [field value ...]
  • key:要操作的哈希表键。
  • field:要设置的字段。
  • value:字段对应的值。

返回值

redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis> 

命令不返回任何值。

myhash:field1: afield2: b

使用 HMSET 命令同时设置多个字段的值:

HMSET myhash field3 c field4 d

命令会将 field3 的值设置为 c,并将 field4 的值设置为 d

如果字段已经存在于哈希表中,则会被更新;如果字段不存在,则会被创建。

myhash 的哈希表如下:

myhash:field1: afield2: bfield3: cfield4: d

4 HMGET:批量获取多个hash类型key的field的值

在这里插入图片描述
HMGET 命令用于同时获取哈希表中一个或多个字段的值。

HMGET key field [field ...]
  • key:要操作的哈希表键。
  • field:一个或多个要获取值的字段。

返回值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
redis> 

返回一个数组,数组中的元素为对应字段的值。如果字段不存在,则返回 nil

myhash:field1: value1field2: value2field3: value3

使用 HMGET 命令获取多个字段的值:

HMGET myhash field1 field2 field4

这个命令会返回一个数组 ["value1", "value2", nil]。因为 field1 对应的值是 value1field2 对应的值是 value2,而 field4 不存在于哈希表中,所以返回 nil

  • HMGET 命令允许一次性获取多个字段的值,非常方便。
  • 返回的值顺序与请求的字段顺序相同,即使某些字段的值为 nil,数组中也会对应位置返回 nil
  • 如果 key 不存在,则返回一个空数组。

5 HGETALL:获取一个hash类型的key中的所有的field和value

在这里插入图片描述
HGETALL 命令用于获取哈希表中所有字段和对应的值。

HGETALL key
  • 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"
redis> 

返回一个数组,数组中的元素为字段和对应的值交替排列。如果哈希表为空,返回一个空数组。

示例

myhash:field1: value1field2: value2field3: value3

使用 HGETALL 命令获取哈希表中所有字段和对应的值:

HGETALL myhash

这个命令会返回一个数组 ["field1", "value1", "field2", "value2", "field3", "value3"]

注意

  • 返回的数组中,字段和对应的值是交替排列的。
  • 如果哈希表为空,返回一个空数组。

6 HKEYS:获取一个hash类型的key中的所有的field

在这里插入图片描述
HKEYS 命令用于获取哈希表中所有的字段(键)。

HKEYS key
  • key:要操作的哈希表键。

返回值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
redis> 

返回一个数组,数组中的元素为哈希表中所有的字段(键)。

myhash:field1: value1field2: value2field3: value3

使用 HKEYS 命令获取哈希表中所有的字段(键):

HKEYS myhash

命令会返回一个数组 ["field1", "field2", "field3"],其中包含了哈希表中的所有字段。

Tips:

  • 返回的数组中的字段顺序不确定。
  • 如果哈希表为空,返回一个空数组。

7 HINCRBY:让一个hash类型key的字段值自增并指定步长

在这里插入图片描述
HINCRBY 命令用于为哈希表中的字段值加上指定增量值。

如果字段不存在,HINCRBY 会先将其值设为 0,然后再执行增加操作。

HINCRBY 很适合用于需要对计数进行递增或递减操作的场景,例如统计点击量、计数器等。

HINCRBY key field increment
  • key:要操作的哈希表键。
  • field:要增加值的字段。
  • increment:要增加的值,可以为负数。

返回值

redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
redis> 

返回字段的增量操作后的值。

myhash 的哈希表如下:

myhash:field1: 5field2: 10

使用 HINCRBY 命令增加字段 field1 的值:

HINCRBY myhash field1 3

这个命令会将 field1 的值增加 3,因此新的值为 8,并返回 8。

如果字段不存在:

HINCRBY myhash field3 7

命令会先将 field3 的值设为 0,然后增加 7,因此新的值为 7,并返回 7。

Tips:

  • HINCRBY 只适用于值为整数的字段,如果字段值不能转换为整数(例如是字符串),则会返回一个错误。
  • increment 可以为负数,这样可以实现减法操作。
  • 如果哈希表或者字段不存在,会自动创建并进行相应的增量操作。

8 HDEL:用于从哈希表中删除一个或多个字段

在这里插入图片描述
HDEL 命令用于从哈希表中删除一个或多个字段。

HDEL key field [field ...]
  • key:要操作的哈希表键。
  • field [field ...]:要删除的字段列表,可以同时删除多个字段。

返回值

redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
redis>

返回被成功移除的字段数量,不包括那些不存在的字段。

myhash:field1: value1field2: value2field3: value3

使用 HDEL 命令删除字段 field1

HDEL myhash field1

这个命令会删除哈希表 myhash 中的 field1 字段,并返回 1,表示成功移除了一个字段。

如果要删除多个字段,可以在命令中同时指定多个字段:

HDEL myhash field2 field3

这个命令会删除哈希表 myhash 中的 field2field3 字段,并返回 2,表示成功移除了两个字段。

如果删除的字段不存在,不会报错,而是简单地忽略。

注意

  • 删除哈希表中不存在的字段将被忽略,不会报错。
  • 如果指定的键不存在,HDEL 命令将返回 0,表示没有字段被移除。

9 HEXISTS:检查哈希表中指定字段是否存在

在这里插入图片描述
HEXISTS 命令用于检查哈希表中指定字段是否存在。

HEXISTS key field
  • key:要操作的哈希表键。
  • field:要检查的字段。

返回值

redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
redis> 

返回整数:

  • 1:如果字段在哈希表中存在。
  • 0:如果字段在哈希表中不存在,或者键不存在。
myhash:field1: value1field2: value2field3: value3

使用 HEXISTS 命令检查字段 field1 是否存在:

HEXISTS myhash field1

这个命令会返回 1,表示字段 field1 存在。

如果检查一个不存在的字段,例如 field4

HEXISTS myhash field4

这个命令会返回 0,表示字段 field4 不存在。

如果哈希表 myhash 本身不存在:

HEXISTS nonexistent_hash somefield

这个命令也会返回 0,表示字段不存在,因为哈希表本身就不存在。


10 HLEN:获取哈希表中字段的数量

在这里插入图片描述
HLEN 命令用于获取哈希表中字段的数量。

HLEN key
  • key:要操作的哈希表键。

返回值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
redis> 

返回整数,表示哈希表中字段的数量。

myhash:field1: value1field2: value2field3: value3

使用 HLEN 命令获取哈希表中字段的数量:

HLEN myhash

这个命令会返回 3,表示哈希表中共有 3 个字段。

如果指定的键不存在,或者键对应的值不是哈希表类型,那么 HLEN 命令会返回 0。

HLEN nonexistent_key

这个命令会返回 0,表示指定的键不存在。

HLEN nonhash_key

这个命令也会返回 0,表示指定的键不是哈希表类型。


更多的Hash命令可以去官网https://redis.io/docs/latest/commands/?group=hash查看哦~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/356194.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows11 24H2网络功能全新升级:全面支持Wi-Fi 7!

Windows11 24H2版本不仅推出了很多新功能,也全面升级了网络功能,全面支持Wi-Fi 7,带给用户最快的网速体验,还支持用户通过二维码分享Wi-Fi密码,操作更加便捷,也更新了SMB、LAPS和NDR协议。接下来跟随小编去…

MongoDB和AI 赋能行业应用:零售

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第三篇。 本系列重点介绍 AI 应用于不同行业的关键用例,涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 利用生成式 AI 技术(Gen AI),零售商可以创造…

BGP路由反射器实验

实验内容: 通过本实验验证bgp路由反射器的规则 1. 从client收到的路由更新,反射到non-client和client,同时发送给EBGP邻居 2. 从non-client收到的路由更新,只反射到client,同时发送给EBGP邻居 3. 从EBGP邻居收到的路…

通信系统概述

1.定义 通信系统(也称为通信网络)是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…

ai绘画软件排行有哪些?介绍四款绘画软件

ai绘画软件排行有哪些?随着人工智能技术的飞速发展,AI绘画软件已经成为艺术创作领域的一股新势力。它们不仅极大地提高了绘画的效率,还为艺术家们带来了前所未有的创作灵感。在众多AI绘画软件中,聪明灵犀凭借其强大的功能和广泛的…

数据采集与预处理复习资料

目录 第一章 简答 1.简述Hadoop各个组件及其功能 2.Hadoop在大数据技术体系中的地位和作用(来自文心一言) 3.Hadoop 启动命令,停止命令 4.pig 加载HDFS 数据 5.数据采集的方法(来自ppt) 6.数据分析过程&#xf…

计算机网络 MAC地址表管理

一、理论知识 1.MAC地址表:交换机使用MAC地址表来记录各MAC地址对应的端口,用于帧转发的目的。 2.老化机制:交换机会为每一条MAC地址表项设置老化时间,老化时间到期后未收到该MAC地址报文的表项将被删除,释放资源。 …

【odoo】常用的基本视图类型

概要 在Odoo中,有几种基本视图类型,每种视图类型用于不同的目的和场景。这些视图类型包括表单视图(form view)、树视图(tree view)、看板视图(kanban view)、图表视图(gr…

数据库新技术【分布式数据库】

文章目录 第一章 概述1.1 基本概念1.1.1 分布式数据库1.1.2 数据管理的透明性1.1.3 可靠性1.1.4 分布式数据库与集中式数据库的区别 1.2 体系结构1.3 全局目录1.4 关系代数1.4.1 基操1.4.2 关系表达式1.4.3 查询树 第二章 分布式数据库的设计2.1 设计策略2.2 分布设计的目标2.3…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-13Kaggle竞赛:2020加州房价预测

13Kaggle竞赛:2020加州房价预测 # 导入所需的库 import numpy as np import pandas as pd import torch import hashlib import os import tarfile import zipfile import requests from torch import nn from d2l import torch as d2l# 读取训练和测试数据 train_…

C#调用OpenCvSharp实现图像的直方图均衡化

本文学习基于OpenCvSharp的直方图均衡化处理方式,并使用SkiaSharp绘制相关图形。直方图均衡化是一种图像处理方法,针对偏亮或偏暗的图像,通过调整图像的像素值来增强图像对比度,详细原理及介绍见参考文献1-4。   直方图均衡化第…

【单片机】Code Composer Studio Linux版本下载,CCS开发环境

被windows的驱动兼容性搞得烦死了,我直接搞虚拟机用linux版本的ccs尝试一下。 下载: https://www.ti.com/tool/download/CCSTUDIO ubuntu22 虚拟机内,安装一些依赖: 安装libc6-i386库: 运行以下命令来安装libc6-i38…

ffmpeg+nginx+video实现rtsp流转hls流,web页面播放

项目场景: 最近调试海康摄像头需要将rtsp流在html页面播放,因为不想去折腾推拉流,所以我选择ffmpeg转hls流,nginx转发,html直接访问就好了 1.首先要下载nginx和ffmpeg 附上下载地址: nginx nginx news ffmpeg htt…

如何将图片转换为表格?方法并不难!

如何将图片转换为表格?在数字化时代,图片中的表格信息提取和整理成为了我们日常工作中不可或缺的一部分。不论是学术研究、商业分析还是个人生活,快速、准确地将图片转换为表格都显得尤为重要。今天,我们就来介绍四款强大的图片转…

带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

ros中发布点云数据xyz以及带颜色的点云数据xyzrgb ros中发布点云数据xyz可以直接用python来做或者C(看个人偏好) ros中发布带颜色的点云数据xyzrgb环境1.新建ROS工作空间2.创建功能包 ros中发布点云数据xyz 可以直接用python来做或者C(看个人偏好) 在这里我们带有颜色的点云数…

数据中心:AI范式下的内存挑战与机遇

在过去的十年里,数据中心和服务器行业经历了前所未有的扩张,这一进程伴随着CPU核心数量、内存带宽(BW),以及存储容量的显著增长。这种超大规模数据中心的扩张不仅带来了对计算能力的急剧需求,也带来了前所未有的内存功率密度挑战&…

MySQL之复制(九)

复制 复制管理和维护 确定主备是否一致 在理想情况下,备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误,备库同样可能因为MySQL自身的特性导致数据不一致,例如MySQL的Bug、网络中断、服务…

【STM32】GPIO简介

1.GPIO简介 GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的GPIO被分成很多组,每组有16个引脚。 最基本的输出…

STM32通过SPI硬件读写W25Q64

文章目录 1. W25Q64 2. 硬件电路 3. 软件/硬件波形对比 4. STM32中的SPI外设 5. 代码实现 5.1 MyI2C.c 5.2 MyI2C.h 5.3 W25Q64.c 5.4 W25Q64.h 5.5 W25Q64_Ins.h 5.6 main.c 1. W25Q64 对于SPI通信和W25Q64的详细解析可以看下面这篇文章 STM32单片机SPI通信详解-C…

AI落地不容乐观-从神话到现实

开篇 在这儿我不是给大家泼冷水,而是我们一起来看一下从2022年11月左右GPT3.0掀起了一股“AI狂潮”后到现在,AI在商用、工业、军用下到底有没有得到了大规模应用呢? 这个答案每一个参与者其实心里有数那就是:没有。 但是呢它的…