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

news2024/11/27 20:32:57

文章目录

  • 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: a
    field2: 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: value1
    field2: value2
    field3: 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: a
    field2: b

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

HMSET myhash field3 c field4 d

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

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

myhash 的哈希表如下:

myhash:
    field1: a
    field2: b
    field3: c
    field4: 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: value1
    field2: value2
    field3: 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: value1
    field2: value2
    field3: 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: value1
    field2: value2
    field3: 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: 5
    field2: 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: value1
    field2: value2
    field3: 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: value1
    field2: value2
    field3: 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: value1
    field2: value2
    field3: 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.coloradmin.cn/o/1848545.html

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

相关文章

数据通信与网络(五)

交换机功能: 地址学习(端口/MAC地址映射表) 通信过滤(基于端口/MAC地址映射表) 生成树协议(断开环路) 隔离冲突域 生成树协议 隔离冲突域 交换机配置模式(用不同级别的命令对交换机进行配置) 普…

VScode安装与汉化

VScode安装与汉化 文章目录 VScode安装与汉化一、软件安装方法一:网站下载方法二:直接用安装包下载 二、汉化方法一:(个人感觉繁琐)方法二:(用这个) Tips:禁用自动更新开…

力扣372. 超级次方

Problem: 372. 超级次方 文章目录 题目描述思路复杂度Code 题目描述 思路 1.处理数组指数:如下图可以将其转换为一个递归的操作 2.处理 mod 运算:对于模运算我们有公式: ( a b ) % k ( a % k ) ( b % k ) % k (a \times b) \% k (a \% k) \times (b…

[C++][数据结构][跳表]详细讲解

目录 0.什么是跳表?1.SkipList的优化思路2.SkipList的效率如何保证?3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表? SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树…

Zookeeper原理

Zookeeper监听原理 监听原理详解 (1)首先要有一个main()线程 (2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener) 。 &#xf…

x64汇编fastcall调用约定

x64汇编环境:只需要在x86基础上对项目属性进行设置,将平台设置为所有平台; 以及在将debug改为x64模式即可: 后续写完代码直接生成项目再使用本地调试器进行运行即可。 fastcall调用约定 在x64架构下,fastcall调用约定…

html渲染的文字样式大小不统一解决方案

React Hooks 封装可粘贴图片的输入框组件(wangeditor)_react 支持图片拖拽的输入框-CSDN博客 这篇文章中的wangediter可粘贴图片的输入框,输入的文字和粘贴的文字在dangerouslySetInnerHTML渲染后出现了字体不统一的情况 在html中右键检查可…

前端 CSS 经典:flex + margin 布局

前言&#xff1a;如今我们布局大多时候都是用的 flex 布局&#xff0c;但是有时我们也可以使用 margin 小技巧去完成布局。在弹性盒中当我们把 margin 某一个方向上设置为 auto&#xff0c;他的含义是用 margin 吃掉这个方向的剩余空间。 1. 元素垂直和水平居中 <!DOCTYPE…

昇思25天学习打卡营第4天|网络构建|函数式自动微分

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 网络构建 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也…

Spring AOP实战--之优雅的统一打印web请求的出参和入参

背景介绍 由于实际项目内网开发&#xff0c;项目保密&#xff0c;因此本文以笔者自己搭建的demo做演示&#xff0c;方便大家理解。 在项目开发过程中&#xff0c;团队成员为了方便调试&#xff0c;经常会在方法的出口和入口处加上log输出&#xff0c;由于每个人的log需求和输…

svm和决策树基本知识以及模型评价以及模型保存

svm和决策树基本知识以及模型评价以及模型保存 文章目录 一、SVM1.1&#xff0c;常用属性函数 二、决策树2.1&#xff0c;常用属性函数2.2&#xff0c;决策树可视化2.3&#xff0c;决策树解释 3&#xff0c;模型评价3.1&#xff0c;方面一&#xff08;评价指标&#xff09;3.2&…

js浅拷贝和深拷贝的区别

JavaScript中的浅拷贝和深拷贝的主要区别在于它们如何处理引用类型的数据。 浅拷贝仅复制对象的引用&#xff0c;而不复制对象本身。这意味着新旧对象共享同一块内存空间。因此&#xff0c;如果修改了原始对象&#xff0c;复制的对象也会相应地改变&#xff0c;因为它们实际上是…

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to

Webstorm vue项目路径不能跳转到对应资源,提示Cannot find declaration to go to 我们 ctrl加鼠标左键点击方法会失效&#xff0c;看了网上很多教程在说需要在此处配置一下webpack.config.js的文件路径&#xff0c;而且指向了node_modules\vue\cli-service\webpack.config.js 我…

网络安全:Web 安全 面试题.(SQL注入)

网络安全&#xff1a;Web 安全 面试题.&#xff08;SQL注入&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系…

基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 CNN-GRU模型架构 4.3 CNN-GRU结合PSO的时间序列预测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软…

Maven笔记(更新中)

一、Maven简介 Maven是一款为Java项目构建,依赖管理的工具(软件),使用Maven可以自动化构建,测试,打包和发布项目,大大提高了开发效率和质量 Maven主要作用理解 依赖管理 Maven可以管理项目的依赖,包括自动下载所需依赖库,自动下载依赖所需的依赖并且保证版本没有冲突,依赖版…

小米红米手机刷Hyper澎湃OS欧版EU教程-全球语言-完整GO框架-纯净飞速

有很多小伙伴喜欢刷小米欧版EU系统&#xff0c;EU版本由于很多base_china&#xff0c;自然稳定性来说&#xff0c;相对于别的区域来说&#xff0c;稳定真的太多&#xff0c;不会出现信号或者相机等奇奇怪怪的BUG&#xff0c;这也是我 们将欧版EU作为第一选择的原因。从界面来看…

OpenHarmony-HDF驱动框架介绍及加载过程分析

前言 HarmonyOS面向万物互联时代&#xff0c;而万物互联涉及到了大量的硬件设备&#xff0c;这些硬件的离散度很高&#xff0c;它们的性能差异与配置差异都很大&#xff0c;所以这要求使用一个更灵活、功能更强大、能耗更低的驱动框架。OpenHarmony系统HDF驱动框架采用C语言面…

综合评价 | 基于因子分析和聚类分析的节点重要度综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于因子分析和聚类分析的节点重要度综合评价&#xff08;Matlab&#xff09; 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复基于因子分析和聚类分析的节点重要度综合评价&#xff08;Matlab…

张量 Tensor学习总结

张量 Tensor 张量是一种多线性函数&#xff0c;用于表示矢量、标量和其他张量之间的线性关系&#xff0c;其在n维空间内有n^r个分量&#xff0c;每个分量都是坐标的函数。张量在坐标变换时也会按照某些规则作线性变换&#xff0c;是一种特殊的数据结构&#xff0c;在MindSpore…