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

Redis——常用数据类型hash

目录

      • hash
        • 常用命令
          • hset
          • hget
          • hdel
          • hkeys
          • hvals
          • hgetall
          • hmget
          • hlen
          • hsetnx
          • hincrby
          • hdecrby
        • 哈希的编码方式
        • 哈希的应用

hash

常用命令
hset
HSET key field value [field value ...]//时间复杂度O(1)
//返回值:设置成功的键值对的个数
hget
HGET key field//
hdel
HDEL key field [field ...]//删除hash中指定的字段
//注意: del删除的是key, hdel删除的是field
hkeys
HKEYS key//查看key对应的哈希表的所有的key
//这个操作会现根据key找到对应的hash,O(1),然后再遍历hash O(n)
//这个操作也有一定的风险,类似于之前的keys*
hvals
HVALS key//和hkeys相对,能够获取去到hash的所有的value
//时间福再度O(n),n是哈希的元素的个数,如果哈希非常大,这个操作就可能导致redis服务器被阻塞住
hgetall
HGETALL key//查看key对应的哈希表的所有的key-val

上述hkeys,hvals,hgetall都是存在一定风险的,hash的元素个数太多,执行的耗时会比较长,从而阻塞redis,可以用hscan来渐进式遍历

hmget
HMGET key field [field2 ...]//查看key中field的value,其中value的顺序和field是匹配的
hlen
HLEN key//获取hash的元素的个数
hsetnx
HSETNX key field value//如果key对应的value不存在 filed,就设置其value,如果存在,就失败
hincrby
HINCRBY key field n//n可以是负数,正数,对key对应的value的整数加n
hdecrby
HDECRBY key field n//n可以是负数,正数,对key对应的value的整数减n
哈希的编码方式

哈希的内部编码有两种:

  • ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个)、同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现,ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比 hashtable 更加优秀
  • 哈希表:当哈希类型无法满足压缩列表(ziplist)的条件时,Redis 会使用哈希表作为哈希的内部实现,因为此时压缩列表的读写效率会下降,而哈希表的读写时间复杂度为 O(1)。

注意:

  1. 哈希中的元素个数比较少,使用ziplist表示,元素个数比较多,使用hashtable来表示
  2. 每个value的值的长度都比较短,使用ziplist表示,如果某个value的长度太长了,也会转换成hashtable
  3. 在Redis的配置文件里可以修改这些参数,如hash-max-ziplist-entries配置(默认512字节),hash-max-ziplist-value配置(默认64字节)

在这里插入图片描述

哈希的应用

关系型数据表保存用户信息

uidnameagecity
1James28xian
2Jonhnathan30shanghai

映射关系表示用户信息

uid:1uid:1uid:2uid:2
name:jamesname:Jonhnathan
age:28age:30
city:xiancity:shanghai

这里可以以uid作为key,剩下的作为value字段,当然这种格式也可以使用string类型实现,比如使用Json这样的数据格式

  • 如果使用string(Json)的格式来表示UserInfo,万一只想获取其中的某个field,或者修改某个field,就需要把真个Json都读出来,解析成对象,操作field,再重写转成Json字符串,再写回去
  • 如果使用hash的方式来表示UserInfo,就可以使用field表示对象的某个属性(数据表的每个列)此时就可以非常方便的修改/获取任何一个属性的值了
  • 使用hash的方式,读写field更加直观功效,但是付出的是空间的代价

但是需要注意的是哈希类型和关系型数据库有两点不同之处:

  • 哈希类型是稀疏的,而关系型数据库是完全结构化的,例如哈希类型每个键可以有不同的 field,而关系型数据库一旦添加新的列,所有行都要为其设置值,即使为 null。

  • 关系数据库可以做复杂的关系查询,而Redis 去模拟关系型复杂查询,例如联表查询、聚合查询等 基本不可能,维护成本⾼。

关系型数据库稀疏性

uidnameagecityganderfavor
1James28xiannullsports
2Jonhnathan30shanghaimadenull
uid:1uid:1uid:2uid:2
name:jamesname:Jonhnathan
city:beijingage:30
favor:sportsgander:male

这里可以看到,上面的 key为uid,但是对应的value信息,还存了一个uid,那么这个uid不存可以吗?当然可以

但是,在工程实践中,一般会把uid在value中再存一份,后续写到相关代码,使用起来会比较方便

相关文章:

Redis——常用数据类型hash

目录 hash常用命令hsethgethdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhdecrby 哈希的编码方式哈希的应用 hash 常用命令 hset HSET key field value [field value ...]//时间复杂度O(1) //返回值:设置成功的键值对的个数hget HGET key field//hdel HDEL key…...

基于Python实现一个庆祝中秋节的小程序

功能包括: 使用复杂的库来计算农历日期:可以使用 lunarcalendar 库来计算农历日期。提供更多的祝福语:可以通过随机选择祝福语来增加趣味性。加入图形用户界面 (GUI):可以使用 tkinter 库来创建一个简单的图形用户界面。 我们可…...

近期最值得买的数码好物有什么?2024兼具功能和实用性的好物分享

在如今这个科技飞速发展的时代,数码好物层出不穷,它们为我们带来了前所未有的便捷与乐趣。而对于学生党和上班族来说,挑选到既实用又性价比高的数码好物,更是能为学习和办公生活增添一抹亮丽的色彩。其中,电容笔便是备…...

云服务器中的MinIO 配置 HTTPS 过程(图文)

目录 1. 基本知识2. 实战3. 彩蛋1. 基本知识 具体证书的格式如下: 私钥:private.key公钥:public.crt (公钥以pem格式结尾,可直接改为crt格式)证书和私钥文件的命名和路径应该是: 证书文件: ~/.minio/certs/public.crt 私钥文件: ~/.minio/certs/private.key使用了自定义…...

注册安全分析报告:熊猫频道

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

2000-2021年3月海关数据库

2000-2021年3月海关数据库 1、时间:2000-2021年3月 2、指标:2000-2015数据变量包括:年份、截止日期、进出口分类代码、进出口分类名称、HS商品编码、HS商品名称、金额_美元、数量、价格、经营单位代码、经营单位名称、经营单位地址、电话、…...

【YashanDB知识库】archivelog磁盘满导致数据库abnormal

本文转自YashanDB官网,具体内容可见archivelog磁盘满导致数据库abnormal 【问题分类】功能使用 【关键字】磁盘空间满,archivelog日志,archivelog自动清理 【问题描述】数据库状态变更为abnormal,检查V$DIAG_INCIDENT视图&#…...

远程跨境传输大文件如何做到安全又稳定?

在当今全球化的商业环境中,企业跨境传输大文件的需求日益增长。这不仅涉及到数据的快速迁移,还包括了安全性、稳定性和合规性等多重挑战。本文将探讨企业在跨境传输大文件时可能遇到的问题,以及在传输过程中应注意的事项,并重点介…...

JSON报文根据正则过滤消息

有时候业务系统在接收外部传过来的JSON报文,可能需要根据某个标识来判断是否是自己系统的消息,不是需要过滤。正常我们可能是先将JSON反序列化为具体实体类(例: A a JSON.parseObject(body,A.class)),然后获取具体字段来判断。此方法面对接收…...

BOM编程

什么是 BOM? BOM(Browser Object Model)是浏览器提供的对象和方法的集合,允许开发者操作浏览器窗口、页面跳转、URL、浏览器历史记录、用户设备信息等。window 对象是 BOM 的顶层对象,所有 BOM API 都直接或间接作为 …...

【C++ Primer Plus习题】16.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <string> usin…...

音视频入门基础:AAC专题(1)——AAC官方文档下载

一、AAC简介 高级音频编码&#xff08;英语&#xff1a;Advanced Audio Coding&#xff0c;AAC&#xff09;是有损音频压缩的专利数字音频编码标准&#xff0c;由Fraunhofer IIS、杜比实验室、贝尔实验室、Sony、Nokia等公司共同开发。出现于1997年&#xff0c;为一种基于MPEG…...

RAG与LLM原理及实践(17)---Docker Redis Python Usage

目录 背景 Redis 环境 download 修改镜像 Run Redis Coding python redis download 基本使用 描述 完整代码 运行结果 高阶用法 序列化的方式 Snapshot 与 AOF 快照(RDB) AOF(Append-Only File) 代码 总结 发布与订阅 描述 代码 运行结果 注…...

技术分享-商城篇-营销模块-优惠券种类(二十六)

前言 在之前的文章技术分享-商城篇-优惠券管理-功能介绍及种类&#xff08;二十四&#xff09; &#xff0c;有对优惠券设计做了阐述&#xff0c;优惠券作为一种强大的促销工具&#xff0c;不仅能够吸引新客户&#xff0c;还能促进现有客户的复购与订单金额的提升。但是优惠券…...

Apache-wed服务器环境的安装

一。安装httpd并且开启httpd yum install httpd systemctl start httpd 二。关闭防火墙 systemctl stop firewall 三。常规配置wed服务 mkdir /www vim index.html&#xff08;里面写入自己的内容&#xff09; chmod 755 index.htm chmod 755 /www vim /etc/httpd/co…...

HR8870:可PWM控制,4.5A直流有刷电机驱动数据手册

HR8870芯片描述 HR8870是一款直流有刷电机驱动器&#xff0c;适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器&#xff0c;该驱动器由四个N-MOS组成&#xff0c;能够以高达4.5A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入进行…...

3D点云目标检测数据集标注工具 保姆级教程——CVAT (附json转kitti代码)

前言&#xff1a; 笔者尝试过很多3D标注软件都遇到很多问题&#xff0c;例如CloudCompare不适合做3D目标检测的数据集而且分割地面的时很繁琐&#xff1b;labelCloud没有三视图&#xff0c;视角难以调整标得不够精确&#xff1b;SUSTechPOINTS换帧麻烦、输出时存储在docker里面…...

获取zabbix API 监控数据shell脚本,自动日常巡检服务器信息、并发送指定群组

一&#xff0c;前言 有zabbix监控&#xff0c;也并不是时刻盯着数据&#xff0c;所以想着&#xff0c;每天固定某个时刻&#xff0c;自动发送服务器数据到指定群组&#xff0c;给其他人更直观的数据。 数据就可以从zabbix API获取。参考官方API文档&#xff1a;https://www.z…...

【spring】maven引入okhttp的日志拦截器打开增量注解进程

HttpLoggingInterceptor 是在logging-interceptor库中的:这个logging库老找不到 import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor;发现这仨是独立的库 pom中三个依赖 <!-- OKHTTP3 --><...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...