当前位置: 首页 > news >正文

Redis:hash类型

Redis:hash类型

    • hash命令
      • 设置与读取
        • HSET
        • HGET
        • HMGET
      • 哈希操作
        • HEXISTS
        • HDEL
        • HKEYS
        • HVALS
        • HGETALL
        • HLEN
        • HSETNX
        • HINCRBY
        • HINCRBYFLOAT
    • 内部编码
      • ziplist
      • hashtable


目前主流的编程语言中,几乎都提供了哈希表相关的容器,Redis自然也会支持对应的内容,满足程序员的需求。

如果说要存储一个用户的姓名和年龄的映射关系,只使用string类型的话,就是下图的样子:

在这里插入图片描述

此时Rediskey放对应的名称,value放对应的值。但是要注意的是,为了区分不同用户,要加上一些前缀来对key命名,比如user1:nameuser2:name,这会比较麻烦。

如果支持了哈希结构:

在这里插入图片描述

此时value内部存储的是哈希表结构,相当于嵌套了两层映射关系。为了不搞混Redis本身的key和哈希表内部的key,所以哈希内部的键称为field


hash命令

设置与读取

HSET
  • 设置hash中指定字段field和值value
hset key field value [field value ...]

返回值是设置成功的filed - value键值对的个数。

示例:

在这里插入图片描述

第一次创建了一个哈希表hash1,设置了两个键值对f1 - 111f2 - 222,返回2。第二次设置同一张哈希表,由于f1f2已经存在了,只设置成功了f3,所以返回1


HGET
  • 获取hash中指定filed的值
hget key field

返回对应字段的value,如果key或者field不存在,返回nil

示例:

在这里插入图片描述


HMGET
  • 一次获取hash中多个字段的值
hget key field [field ...]

返回所有field对应的value,如果key或者field不存在,返回nil

示例:

在这里插入图片描述

示例中,nameage都是存在的字段,返回了对应的值,而address不存在,返回nil

另外的,还有与hmget对应的hmset,可以一次设置多个哈希键值对,但是hset本身就支持设置多个哈希键值对,所以没必要。


哈希操作

HEXISTS
  • 判断 hash中是否有指定的field
hexists key field

返回0表示不存在,返回1表示存在。

示例:

在这里插入图片描述


HDEL
  • 删除 hash 中的filed字段
hdel key field [field ...]

返回本次操作删除的字段个数。

示例:

在这里插入图片描述
第一次删除了f3,返回1。第二次删除了f1f2,返回2

如果使用del,而不是hdel,那么删除的是整张哈希表。


HKEYS
  • 获取hash中的所有field
hkeys key

返回所有的field

示例:

在这里插入图片描述


HVALS
  • 获取hash中的所有value
hvals key

返回所有的value

示例:

在这里插入图片描述


HGETALL
  • 获取hash中所有的fieldvalue
hgetall key

返回所有的field以及对应的value

示例:

在这里插入图片描述

从上往下以field_1value_1field_2value_2field_3value_3的顺序输出。


HLEN
  • 获取hash中所有字段的个数
hlen key

返回field个数。

示例:

在这里插入图片描述

要注意的是,这个操作时间复杂度是O(1)Redis不会去遍历哈希表,而是有专门的变量维护哈希表的大小,需要时直接读取变量即可。


HSETNX
  • 在字段不存在的情况下,设置hash中的字段和值
hsetnx key field value

如果field已经存在,那么此次设置失败,返回0表示设置失败,返回1表示设置成功。

在这里插入图片描述

第一次设置user name失败,因为name字段已经存在,第二次user friend设置成功,因为原先不存在该field


HINCRBY
  • hash的指定的field对应的value增加指定值
hincrby key field increment

因为hash内部的value还是一个string,而string可以存储整数,也就可以支持算数操作了。

incrby一样,支持正负数,如果不存在那么视为数字0,最后返回变化后的值。

示例:

在这里插入图片描述

示例中,user包含nameageemail字段,第一次对age自增2。第二次自增一个不存在的键id,此时id默认视为0


HINCRBYFLOAT
  • hash的指定的field对应的value增加指定浮点值
hincrbyfloat key field increment

incrbyfloat一样,支持正负数,如果不存在那么视为数字0,最后返回变化后的值。

总结:

命令执行效果
hset key field value设置值
hget key field获取值
hdel key field[field...]删除field
hlen key计算field个数
hgetall key获取所有的field-value
hmget field[field...]批量获取field-value
hmset field value[field value...]批量设置field-value
hexists key field判断field是否存在
hkeys key获取所有的field
hvals key获取所有的value
hsetnx key field value设置值,但必须在field不存在时才能设置成功
hincrby key field n对应field-value+n
hincrbyfloat key field n对应field-value+n
hstrlen key field计算value的字符串长度

内部编码

hash内部编码格式包含两种:ziplisthashtable

ziplist

压缩列表是一种内存紧凑的存储方式,适合存储数量较少且元素较小的哈希。具体来说,当hash类型的元素个数小于 hash-max-ziplist-entries (默认 512 个),并且所有值的长度都小于 hash-max-ziplist-value (默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现。

这些配置在/etc/redis/redis.conf内修改。

优点:

  1. 内存节省ziplist 使用连续的内存块来存储数据,这种紧凑的存储方式可以有效地减少内存碎片和开销。
  2. 结构简单:适合小规模数据,尤其是在内存资源有限的情况下。

缺点:

  1. 操作效率:随着数据量的增加,ziplist 的读写效率会下降。尤其是在需要频繁更新的场景中,ziplist 的线性查找特性使得操作复杂度较高。
  2. 扩展性差:不适合大规模数据存储。

hashtable

当哈希类型无法满足 ziplist 的条件时,Redis 会自动切换到使用哈希表作为哈希的内部实现。

优点:

  1. 高效的读写:哈希表的读写时间复杂度为 O(1),即使在数据量较大时也能保证高效的访问。
  2. 良好的扩展性:适合存储大量数据和需要频繁更新的场景。

缺点:

  1. 内存占用:相较于 ziplist,哈希表在内存使用上相对较多,特别是在存储小数据集时,内存开销更为显著。

相关文章:

Redis:hash类型

Redis:hash类型 hash命令设置与读取HSETHGETHMGET 哈希操作HEXISTSHDELHKEYSHVALSHGETALLHLENHSETNXHINCRBYHINCRBYFLOAT 内部编码ziplisthashtable 目前主流的编程语言中,几乎都提供了哈希表相关的容器,Redis自然也会支持对应的内容&#xf…...

力扣9.30

1749. 任意子数组和的绝对值的最大值 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组(可能为空)&#xff0c…...

kafka下载配置

下载安装 参开kafka社区 zookeeperkafka消息队列群集部署https://apache.csdn.net/66c958fb10164416336632c3.html 下载 kafka_2.12-3.2.0安装包快速下载地址分享 官网下载链接地址: 官网下载地址:https://kafka.apache.org/downloads 官网呢下载慢…...

nlp任务之预测中间词-huggingface

目录 1.加载编码器 1.1编码试算 2.加载数据集 3.数据集处理 3.1 map映射:只对数据集中的sentence数据进行编码 3.2用filter()过滤 单词太少的句子过滤掉 3.3截断句子 4.创建数据加载器Dataloader 5. 下游任务模型 6.测试预测代码 7.训练代码 8.保…...

《程序猿之Redis缓存实战 · Redis 与数据库一致性》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

【无标题】observer: error while loading shared libraries: libmariadb.so.3处理办法

文章目录 1.记录新装的oceanbase,使用observer帮助时,出现lib文件无法找到的处理过程 ./observer --help ./observer: error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directory2.做一个strace跟踪&…...

极客兔兔Gee-Cache Day1

极客兔兔7Days GeeCache - Day1 interface{}:任意类型 缓存击穿:一个高并发的请求查询一个缓存中不存在的数据项,因此这个请求穿透缓存直接到达后端数据库或数据源来获取数据。如果这种请求非常频繁,就会导致后端系统的负载突然…...

[MAUI]数据绑定和MVVM:MVVM的属性验证

一、MVVM的属性验证案例 Toolkit.Mvvm框架中的ObservableValidator类,提供了属性验证功能,可以使用我们熟悉的验证特性对属性的值进行验证,并将错误属性提取和反馈给UI层。以下案例实现对UI层的姓名和年龄两个输入框,进行表单提交验证。实现效果如下所示 View<ContentP…...

2024年水利水电安全员考试题库及答案

一、判断题 1.采用水下钻孔爆破方案时&#xff0c;侧面应采用预裂爆破&#xff0c;并严格控制单响药量以保护附近建&#xff08;构&#xff09;筑物的安全。 答案&#xff1a;正确 2.围堰爆破拆除工程的实施应成立爆破指挥机构&#xff0c;并应按设计确定的安全距离设置警戒。…...

【快速删除 node_modules 】rimraf

目录 1. 什么是node_modules 2. 卸载一个npm包 3. 删除 node_modules 为什么这么慢 4. rimraf 5. 为什么rimraf 这么快 作为前端开发&#xff0c;无论我们关注不关注&#xff0c;每天都能接触到node_modules。通常产生于一个npm install命令&#xff0c;之后就不会多加关注…...

毕业设计选题:基于ssm+vue+uniapp的教学辅助小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

13-指针和动态内存-内存泄漏

一、视频笔记&#xff1a; C语言通过malloc&#xff0c;来获取堆上的内存。 动态调用内存&#xff1a; malloc 和 free &#xff1b;new 和 delete 都行。 内存泄漏指的是我们动态申请了内存&#xff0c;但是即是是使用完了之后&#xff08;从来都不去释放它&#xff09;。只…...

基于深度学习的视频摘要生成

基于深度学习的视频摘要生成是一种通过自动化方式从长视频中提取关键片段&#xff0c;生成简洁且有代表性的视频摘要的技术。其目的是在保留视频主要内容的基础上&#xff0c;大幅缩短视频的播放时长&#xff0c;方便用户快速理解视频的核心信息。以下是视频摘要生成的主要方法…...

适合初学者的[JAVA]: 基础面试题

目录 说明 前言 String/StringBuffer/StringBuilder区别 第一点: 第二点: 总结&#xff1a; 反射机制 JVM内存结构 运行时数据区域被划分为5个主要组件&#xff1a; 方法区&#xff08;Method Area&#xff09; 堆区&#xff08;Heap Area&#xff09; 栈区&#x…...

internal.KaptWithoutKotlincTask$KaptExecutionWorkAction 问题 ---Room数据库

Caused by: java.lang.Exception: No native library is found for os.nameMac and os.archaarch64. path/org/sqlite/native/Mac/aarch64 m3 目前使用的是MAC M3芯片的配置会出现这个问题。M1就应该就有这个问题 解决&#xff1a; 在project层级的build.gradle中的allprojec…...

Frequency-aware Feature Fusion for Dense Image Prediction 论文阅读

摘要:密集图像预测任务要求具有强类别信息和高分辨率精确空间边界细节的特征。为了实现这一点&#xff0c;现代分层模型通常利用特征融合&#xff0c;直接添加来自深层的上采样粗特征和来自较低层次的高分辨率特征。在本文中&#xff0c;我们观察到融合特征值在对象内的快速变化…...

Springboot + netty + rabbitmq + myBatis

目录 0.为什么用消息队列1.代码文件创建结构2.pom.xml文件3.三个配置文件开发和生产环境4.Rabbitmq 基础配置类 TtlQueueConfig5.建立netty服务器 rabbitmq消息生产者6.建立常规队列的消费者 Consumer7.建立死信队列的消费者 DeadLetterConsumer8.建立mapper.xml文件9.建立map…...

电磁兼容(EMC):整改案例(四)人体对EFT测试影响有多大?

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试&#xff0c;测试条件为&#xff1a;频率5kHz/100kHz&#xff0c;测试电压L&#xff0c;N线间2kV&#xff0c;L&#xff0c;N线对PE线4kV。测试过程中需要…...

数据可视化基础:让数据说话

一、引言 在信息洪流中&#xff0c;数据可视化如同灯塔&#xff0c;照亮了数据的海洋&#xff0c;让我们能够洞察数据背后的意 义。 下面是对数据可视化的详细介绍&#xff0c;包括定义、作用、类型、原则、工具方法以及应用场景&#xff0c; 并附上具体的代码示例。 二、数…...

有哪些优化数据库性能的方法?如何定位慢查询?数据库性能优化全攻略:从慢查询定位到高效提升

在现代应用程序开发中&#xff0c;数据库的性能对于整体系统的响应能力至关重要。随着用户数量的增加和数据量的增长&#xff0c;如何优化数据库性能、定位慢查询成了每一个开发者面临的重要挑战。今天&#xff0c;我想和大家分享一些实用的数据库性能优化方法&#xff0c;以及…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...