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.mzph.cn/pingmian/31875.shtml

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

相关文章

华为DCN技术:M-LAG

M-LAG(Multichassis Link Aggregation Group)即跨设备链路聚合组,是一种实现跨设备链路聚合的机制。M-LAG主要应用于普通以太网络、VXLAN和IP网络的双归接入,可以起到负载分担或备份保护的作用。相较于另一种常见的可靠性接入技术…

第二十七篇——通信趋势:5G和IOT的商机在哪里?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 借势的重要性,但是要做到借势,得先看到&#xff0…

区块链技术:金融市场监管的新篇章

一、引言 随着金融科技的迅猛发展,区块链技术作为其中的佼佼者,正逐渐改变着金融市场的格局。在金融市场监管领域,区块链技术以其独特的优势,为监管机构提供了新的监管思路和手段。本文将深入探讨区块链技术在金融市场监管中的作用…

【分布式系列】分布式锁timeout了怎么办?

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

XSS漏洞—XSS平台搭建与打cookie

一、跨站脚本攻击漏洞接收平台 推荐两个: 1)xsser : XSS平台 - (支持http/https)XSS Platform 2)蓝莲花 :GitHub - firesunCN/BlueLotus_XSSReceiver xsser: BlueLotus&#xff…

SM3在线计算工具

SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法…

RPM 打包入门(基于openEuler)

主要参考内容(均为官方文档): https://rpm-packaging-guide.github.io/#building-rpms https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/introduction-to-rpm_packagin…

WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定

WPF文本绑定显示格式StringFormat设置 特殊格式设置日期/时间使用系统默认样式自定义格式: 绑定多个属性(多重绑定)多重绑定中的特殊字符示例: 特殊格式设置 在Textblock等文本控件中,我们经常要显示一些日期和时间&a…

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器(factor detector)2.4 生态探测器(ecological detector)2.5 交互因子探测器(interaction dete…

Leetcode3184. 构成整天的下标对数目 I

Every day a Leetcode 题目来源&#xff1a;3184. 构成整天的下标对数目 I 解法1&#xff1a;遍历 统计满足 i < j 且 hours[i] hours[j] 构成整天的下标对 i, j 的数目。 构成整天的条件&#xff1a;(hours[i] hours[j]) % 24 0。 代码&#xff1a; /** lc applee…

推出RW610高度集成的低功耗无线MCU,带内置3频:1x1 Wi-Fi®6+ Bluetooth® Low Energy 5.4射频单元

RW610是一款高度集成的低功耗无线MCU&#xff0c;它集成了MCU和Wi-Fi6Bluetooth Low Energy (LE) 5.4射频单元&#xff0c;适用于多种应用&#xff0c;包括互联智能家居设备、游戏控制器、企业和工业自动化、智能配件和智能能源。 采用TFBGA145封装的系列器件&#xff1a;RW61…

大数据学习-环境准备

VMware 部分 网络设置 下载好 CentOS 7 的镜像文件 修改 VMware 的网络 把子网 ip 修改为 192.168.88.0&#xff0c;然后点击 NAT 设置&#xff0c;修改网关 IP 为 192.168.88.2 之后就确定即可 虚拟机安装 选择镜像文件&#xff0c;使用 VMware 的典型安装方法即可&#…

分解数据堆栈:存储和计算 2.0 的分解

在LinkedIn上&#xff0c;有一篇优秀的帖子在数据和数据库人群中流行。它由 Theory VC 合伙人 Tomasz Tunguz 撰写&#xff0c;讲述了我们自 2019 年以来讨论的趋势。 数据库正在成为高速查询引擎&#xff0c;并正在抛弃存储。这并不意味着存储不重要&#xff0c;相反&#xf…

Opencv学习项目5——pyzbar,numpy

上一次我们使用pyzbar进行解码二维码并将其内容显示在图像上&#xff0c;使用的是rect barcode.rect来获取图像的坐标&#xff0c;这次我们使用另一种方法来获取坐标进行画框。 Numpy介绍 NumPy 是一个用于科学计算的开源 Python 库&#xff0c;提供了对大量数值数据进行高效操…

MFC GDI绘制卡通人物

文章目录 主要代码完整visual studio工程下载主要代码 // DrawFrogView.cpp : implementation of the CDrawFrogView class //#include "stdafx.h" #include "DrawFrog.h"#include "DrawFrogDoc.h" #include "DrawFrogView.h"#includ…

5. Revit API: Application

5. Revit API: Application 前言 上一篇中&#xff0c;讲到了UI篇的Ribbon&#xff08;界面&#xff09;&#xff0c;并提到要创建 RibbonPanel&#xff0c;需要使用UIControlledApplication.CreateRibbonPanel(..)方法&#xff0c;还在结尾说到要写“UI”开头的那些个类&…

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法 一、项目提出前状况 1)立项背景 轧钢退火酸洗生产线的酸洗过程需要使用大量的硫酸、盐酸、硝酸、氢氟酸等酸液对钢带的表面进行清洗,酸洗过后产生较多的酸洗废水,酸洗废水需要经过处理达到污水排放标准后才能排放。其中酸…

【linux】内核源码TCP->IP->L2层函数调用继续摸索中

日志打印的时候&#xff0c;把行数也打印了&#xff1a; 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/b847489a9910f68b9581fd8788807c697c82cdbd 上回基于应用层wget操作找到TCP调用的一些接口&#xff0c;并且已经到IP层的一些接口&#xff0c;当前基…

昇思25天学习打卡营第3天|数据集Dataset

一、简介&#xff1a; 数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。有一种说法是模型最终训练的结果&#xff0c;10%受到算法影响&#xff0c;剩下的90%都是由训练的数据质量决定。&#xff08;doge&#xff09; MindSpore提供基于…