Redis:hash类型
Redis:hash类型
- hash命令
- 设置与读取
- HSET
- HGET
- HMGET
- 哈希操作
- HEXISTS
- HDEL
- HKEYS
- HVALS
- HGETALL
- HLEN
- HSETNX
- HINCRBY
- HINCRBYFLOAT
- 内部编码
- ziplist
- hashtable
目前主流的编程语言中,几乎都提供了哈希表相关的容器,Redis
自然也会支持对应的内容,满足程序员的需求。
如果说要存储一个用户的姓名和年龄的映射关系,只使用string
类型的话,就是下图的样子:
此时Redis
的key
放对应的名称,value
放对应的值。但是要注意的是,为了区分不同用户,要加上一些前缀来对key
命名,比如user1:name
,user2:name
,这会比较麻烦。
如果支持了哈希结构:
此时value
内部存储的是哈希表结构,相当于嵌套了两层映射关系。为了不搞混Redis
本身的key
和哈希表内部的key
,所以哈希内部的键称为field
。
hash命令
设置与读取
HSET
- 设置
hash
中指定字段field
和值value
hset key field value [field value ...]
返回值是设置成功的filed - value
键值对的个数。
示例:
第一次创建了一个哈希表hash1
,设置了两个键值对f1 - 111
、f2 - 222
,返回2
。第二次设置同一张哈希表,由于f1
和f2
已经存在了,只设置成功了f3
,所以返回1
。
HGET
- 获取
hash
中指定filed
的值
hget key field
返回对应字段的value
,如果key
或者field
不存在,返回nil
。
示例:
HMGET
- 一次获取
hash
中多个字段的值
hget key field [field ...]
返回所有field
对应的value
,如果key
或者field
不存在,返回nil
。
示例:
示例中,name
和age
都是存在的字段,返回了对应的值,而address
不存在,返回nil
。
另外的,还有与hmget
对应的hmset
,可以一次设置多个哈希键值对,但是hset
本身就支持设置多个哈希键值对,所以没必要。
哈希操作
HEXISTS
- 判断
hash
中是否有指定的field
hexists key field
返回0
表示不存在,返回1
表示存在。
示例:
HDEL
- 删除
hash
中的filed
字段
hdel key field [field ...]
返回本次操作删除的字段个数。
示例:
第一次删除了f3
,返回1
。第二次删除了f1
和f2
,返回2
。
如果使用del
,而不是hdel
,那么删除的是整张哈希表。
HKEYS
- 获取
hash
中的所有field
hkeys key
返回所有的field
。
示例:
HVALS
- 获取
hash
中的所有value
hvals key
返回所有的value
。
示例:
HGETALL
- 获取
hash
中所有的field
和value
hgetall key
返回所有的field
以及对应的value
。
示例:
从上往下以field_1
、value_1
、field_2
、value_2
、field_3
、value_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
包含name
、age
、email
字段,第一次对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
内部编码格式包含两种:ziplist
和hashtable
。
ziplist
压缩列表是一种内存紧凑的存储方式,适合存储数量较少且元素较小的哈希。具体来说,当hash
类型的元素个数小于 hash-max-ziplist-entries
(默认 512 个),并且所有值的长度都小于 hash-max-ziplist-value
(默认 64 字节)时,Redis
会使用 ziplist
作为哈希的内部实现。
这些配置在/etc/redis/redis.conf
内修改。
优点:
- 内存节省:
ziplist
使用连续的内存块来存储数据,这种紧凑的存储方式可以有效地减少内存碎片和开销。 - 结构简单:适合小规模数据,尤其是在内存资源有限的情况下。
缺点:
- 操作效率:随着数据量的增加,
ziplist
的读写效率会下降。尤其是在需要频繁更新的场景中,ziplist
的线性查找特性使得操作复杂度较高。 - 扩展性差:不适合大规模数据存储。
hashtable
当哈希类型无法满足 ziplist
的条件时,Redis
会自动切换到使用哈希表作为哈希的内部实现。
优点:
- 高效的读写:哈希表的读写时间复杂度为
O(1)
,即使在数据量较大时也能保证高效的访问。 - 良好的扩展性:适合存储大量数据和需要频繁更新的场景。
缺点:
- 内存占用:相较于
ziplist
,哈希表在内存使用上相对较多,特别是在存储小数据集时,内存开销更为显著。
相关文章:
Redis:hash类型
Redis:hash类型 hash命令设置与读取HSETHGETHMGET 哈希操作HEXISTSHDELHKEYSHVALSHGETALLHLENHSETNXHINCRBYHINCRBYFLOAT 内部编码ziplisthashtable 目前主流的编程语言中,几乎都提供了哈希表相关的容器,Redis自然也会支持对应的内容…...
力扣9.30
1749. 任意子数组和的绝对值的最大值 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组(可能为空),…...
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.采用水下钻孔爆破方案时,侧面应采用预裂爆破,并严格控制单响药量以保护附近建(构)筑物的安全。 答案:正确 2.围堰爆破拆除工程的实施应成立爆破指挥机构,并应按设计确定的安全距离设置警戒。…...
【快速删除 node_modules 】rimraf
目录 1. 什么是node_modules 2. 卸载一个npm包 3. 删除 node_modules 为什么这么慢 4. rimraf 5. 为什么rimraf 这么快 作为前端开发,无论我们关注不关注,每天都能接触到node_modules。通常产生于一个npm install命令,之后就不会多加关注…...
毕业设计选题:基于ssm+vue+uniapp的教学辅助小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
13-指针和动态内存-内存泄漏
一、视频笔记: C语言通过malloc,来获取堆上的内存。 动态调用内存: malloc 和 free ;new 和 delete 都行。 内存泄漏指的是我们动态申请了内存,但是即是是使用完了之后(从来都不去释放它)。只…...
基于深度学习的视频摘要生成
基于深度学习的视频摘要生成是一种通过自动化方式从长视频中提取关键片段,生成简洁且有代表性的视频摘要的技术。其目的是在保留视频主要内容的基础上,大幅缩短视频的播放时长,方便用户快速理解视频的核心信息。以下是视频摘要生成的主要方法…...
适合初学者的[JAVA]: 基础面试题
目录 说明 前言 String/StringBuffer/StringBuilder区别 第一点: 第二点: 总结: 反射机制 JVM内存结构 运行时数据区域被划分为5个主要组件: 方法区(Method Area) 堆区(Heap Area) 栈区&#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就应该就有这个问题 解决: 在project层级的build.gradle中的allprojec…...
Frequency-aware Feature Fusion for Dense Image Prediction 论文阅读
摘要:密集图像预测任务要求具有强类别信息和高分辨率精确空间边界细节的特征。为了实现这一点,现代分层模型通常利用特征融合,直接添加来自深层的上采样粗特征和来自较低层次的高分辨率特征。在本文中,我们观察到融合特征值在对象内的快速变化…...
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标准进行电快速瞬变脉冲群测试,测试条件为:频率5kHz/100kHz,测试电压L,N线间2kV,L,N线对PE线4kV。测试过程中需要…...
数据可视化基础:让数据说话
一、引言 在信息洪流中,数据可视化如同灯塔,照亮了数据的海洋,让我们能够洞察数据背后的意 义。 下面是对数据可视化的详细介绍,包括定义、作用、类型、原则、工具方法以及应用场景, 并附上具体的代码示例。 二、数…...
有哪些优化数据库性能的方法?如何定位慢查询?数据库性能优化全攻略:从慢查询定位到高效提升
在现代应用程序开发中,数据库的性能对于整体系统的响应能力至关重要。随着用户数量的增加和数据量的增长,如何优化数据库性能、定位慢查询成了每一个开发者面临的重要挑战。今天,我想和大家分享一些实用的数据库性能优化方法,以及…...
C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点
题目: 题解: struct TreeNode* deleteNode(struct TreeNode* root, int key){struct TreeNode *cur root, *curParent NULL;while (cur && cur->val ! key) {curParent cur;if (cur->val > key) {cur cur->left;} else {cur c…...
智慧防灾,科技先行:EasyCVR平台助力地质灾害视频监测系统建设
随着科技的飞速发展,视频监控技术已成为地质灾害监测与预警的重要手段之一。在众多视频监控平台中,EasyCVR视频汇聚平台凭借其强大的视频整合、实时传输、视频处理及分发等能力,在地质灾害场景中展现出显著的应用优势。 一、实时监测与远程监…...
掌握C#核心概念:类、继承、泛型等
C# 是一门功能强大且灵活的面向对象编程语言,它结合了许多现代编程语言的特点和特性。无论你是编程新手,还是有经验的开发者,理解C#中的核心概念都是非常重要的。本文将介绍C#中的类与对象、构造函数和析构函数、方法的重载与重写、继承与多态…...
[VULFOCUS刷题]tomcat-pass-getshell 弱口令
tomcat-pass-getshell 弱口令 启动容器,打开网站 点开manageapp,输入弱口令 tomcat/tomcat 之后在下面上传jsp大马,首先生成一个jsp马 这里我直接使用github别人生成好的 tennc/webshell: This is a webshell open source project (github.…...
golang rpc
RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务,对应rpc的是本地过程调用,函数调用是最常用的本地过程调用,将本地过程调用变成远程调用会面临着各种问题。 以两数…...
A Learning-Based Approach to Static Program Slicing —— 论文笔记
A Learning-Based Approach to Static Program Slicing OOPLSA’2024 文章目录 A Learning-Based Approach to Static Program Slicing1. Abstract2. Motivation(1) 为什么需要能处理不完整代码(2) 现有方法局限性(3) 验证局限性: 初步实验研究实验设计何为不完整代码实验结果…...
掌握 C# 中的委托与事件机制
C# 中的委托和事件为开发者提供了处理回调、异步编程以及发布订阅模式的强大工具。委托与事件机制在实际应用中非常常见,特别是在事件驱动编程和 GUI 应用中。本文将带你深入理解委托的定义、匿名方法、Lambda 表达式、事件机制以及多播委托的使用。 1. 委托&#x…...
使用微服务Spring Cloud集成Kafka实现异步通信(消费者)
1、本文架构 本文目标是使用微服务Spring Cloud集成Kafka实现异步通信。其中Kafka Server部署在Ubuntu虚拟机上,微服务部署在Windows 11系统上,Kafka Producer微服务和Kafka Consumer微服务分别注册到Eureka注册中心。Kafka Producer和Kafka Consumer之…...
docker pull 超时Timeout失败的解决办法
当国内开发者docker pull遇到如下提示时,不要惊讶 [rootvm /]# docker pull postgres Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.146.235:443: i/o timeout [rootvm /]# 自2024…...
YOLOv7改进之主干DAMOYOLO结构,结合 CReToNeXt 结构,打造高性能检测器
一、DAMOYOLO理论部分 论文地址:2211.15444 (arxiv.org) 在本报告中,我们提出了一种快速准确的对象检测方法,称为 DAMO-YOLO,它实现了比最先进的 YOLO 系列更高的性能。DAMO-YOLO 是从 YOLO 扩展而来的,具有一些新技术,包括神经架构搜索 (NAS)、高效的重新参数化广义 …...
恩施建站建设/seo就业指导
为什么80%的码农都做不了架构师?>>> 1、将系统的构造与使用分开 将启动过程和启动过程之后的运行时逻辑分离开。 比如在运行时延迟加载,不是一个好的做法,因为我们不知道延迟加载的对象在所有情形是否都是正确的。 2、依赖注入&a…...
政府网站开发的目的/网站排名优化课程
其他router相关内容索引 序号内容连接地址1vue router 整合引入https://blog.csdn.net/qq_21271511/article/details/1093684592vue router 模块化开发https://blog.csdn.net/qq_21271511/article/details/1093692473vue router 动态路由及菜单实现之一https://blog.csdn.net/…...
wordpress 页面管理/seo优化是什么意思
谷歌应用商店开发者注册一、前言二、准备工作1.科学上网工具2.一张国际信用卡3.创建一个新的Google邮箱账号4.兑换外币三、开始注册四、上架一个内部测试的app一、前言 目前国内大部分app上架需要软著,也就意味着app上架的周期很长,但由于很多时候出于测…...
做网站分为哪几个岗位/百度小说风云榜首页
写在前面进程基础进程概念进程描述符进程创建上下文切换init进程进程应用进程间通信信号处理后台进程与守护进程浅谈nginx多进程模型常用工具介绍ps: 查看进程属性lsof: 查看打开的文件情况netstat: 查看网络连接情况strace: 查看系统调用情况进程基础基础概念进程是操作系统的…...
北京市工程建设/专业seo培训
在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求。因为这样最简单。 其实代码实现大家都知道,就是服务器上有个ServerSocket在某个端口监听,接收到…...
空气能空调如何做网站/餐饮营销引流都有什么方法
1:方法(掌握)(1)方法: 就是完成特定功能的代码块。 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。(2)格式:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { 方法体语…...