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中再存一份,后续写到相关代码,使用起来会比较方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879355.shtml

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

相关文章

【SSRF漏洞】——http协议常见绕过

改变的确很难,但结果值得冒险 本文如有错误之处,还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标…

linux常用环境配置

nvm 用于管理不同版本node node版本管理工具 nvm install 18 #安装 nvm uninstall 18 #卸载 nvm use 18 #使用 nvm ls #查看当前有的node版本 nvm ls-remote #列出所有可用的node版本pyenv 在linux中管理多版本 python 常用命令: pyenv install 3.8.…

Linux 防火墙:iptables (二)

文章目录 SNAT 原理与应用SNAT 应用环境SNAT 原理SNAT 转换前提条件SNAT 格式SNAT 转换规则配置 DNAT 原理与应用DNAT 应用环境DNAT 原理DNAT 转换前提条件DNAT 格式DNAT 转换规则配置 iptables 规则的备份和还原导出(备份)所有表的规则导入(…

PCL 点云基于曲率大小渲染颜色

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概…

keep-alive缓存不了iframe

最近做了个项目&#xff0c;其中有个页面是由 iframe 嵌套了一个另外的页面&#xff0c;在运行的过程中发现 KeepAlive 并不生效&#xff0c;每次切换路由都会触发 iframe 页面的重新渲染&#xff0c;代码如下&#xff1a; <router-view v-slot"{ Component }">…

【python设计一个带有简单界面的计算器】

为了设计一个带有简单界面的计算器&#xff0c;我们可以使用Python的图形用户界面&#xff08;GUI&#xff09;库&#xff0c;比如Tkinter。Tkinter是Python的标准GUI库&#xff0c;它提供了一个快速且简单的方式来创建窗口应用程序。 下面是一个使用Tkinter设计的简单计算器的…

深入解析Go语言的类型方法、接口与反射

Go语言作为一门现代编程语言&#xff0c;以其简洁高效的特性受到广大开发者的喜爱。在本文中&#xff0c;我们将深入探讨Go语言中的类型方法、接口和反射机制。通过丰富的代码示例和详尽的解释&#xff0c;帮助您全面理解这些关键概念&#xff0c;并在实际开发中灵活运用。 一…

速盾:高防 cdn 分布式防御攻击?

在当今数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;各种网络攻击手段层出不穷。为了保护企业和个人的网络资产安全&#xff0c;高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;成为了一种重要的防御手段。其中&#xff0c;分布…

Django笔记一:搭建Django环境与URL路径访问

博主之前学从Java后端开发&#xff0c;后面获取到读研资格&#xff0c;想着未来转算法岗&#xff0c;初学Python&#xff0c;发现Python还挺有趣的&#xff0c;由于之前所学后端缘故&#xff0c;有点后端情节&#xff0c;想学习一下Django框架&#xff08;python的web框架&…

人工智能和机器学习:探讨人工智能和机器学习的最新发展、应用、挑战和未来趋势

人工智能和机器学习是当前科技领域的热点话题&#xff0c;其最新发展、应用、挑战和未来趋势备受关注。 最新发展&#xff1a; 人工智能和机器学习技术在近年来得到了快速发展&#xff0c;尤其是深度学习技术的广泛应用。例如&#xff0c;深度学习在图像识别、语音识别、自然语…

Superset二次开发之源码 run-server.sh 分析

背景&#xff1a; 如果基于docker方式部署Superset项目&#xff0c;Dockerfile文件末尾指向了docker-ci.sh&#xff0c;而docker-ci.sh 脚本又指向了run-server.sh。因此我们重点分析一下run-server脚本 路径 docker\run-server.sh #!/usr/bin/env bashHYPHEN_SYMBOL-gunicorn…

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法&#xff0c;该方法也会在其原型上 static静态数据&#xff0c;访问静态属性通过 类名.id getter和setter getter&#xff1a;定义一个属性&…

网络学习-eNSP配置VRRP

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP广泛应用在边缘网络中&#xff0c;是一种路由冗余协议&#xff0c;它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱&#xff0c;允许主机使用单路由器&#xff0c;以及即使在实际…

Rust 所有权 简介

文章目录 发现宝藏1. 所有权基本概念2. 所有权规则3. 变量作用域4. 栈与堆4.1 栈&#xff08;Stack&#xff09;4.2 堆&#xff08;Heap&#xff09; 5. String类型5.1 String 类型5.2 String 的内存分配5.3 所有权与内存管理5.4 String 与切片 6. 变量与数据交互方式6.1 移动&…

全球NAND原厂闪存市场格局变化

根据市场研究机构TrendForce的最新跟踪报告&#xff0c;三星&#xff08;Samsung&#xff09;和SK海力士&#xff08;SK hynix-Solidigm&#xff09;在过去的一个季度中扩大了他们在NAND闪存市场的份额&#xff0c;这主要得益于抢占了铠侠&#xff08;Kioxia&#xff09;与西部…

小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍

遥感领域的小目标检测一直是个具有挑战性和趣味性的研究方向&#xff0c;同时也是顶会顶刊的常客。但不得不说&#xff0c;今年关于遥感小目标检测的研究热情尤其高涨&#xff0c;已经出现了很多非常优秀的成果。 比如SuperYOLO方法&#xff0c;通过融合多模态数据并执行高分辨…

【重学 MySQL】二十八、SQL99语法新特性之自然连接和 using 连接

【重学 MySQL】二十八、SQL99语法新特性之自然连接和 using 连接 自然连接&#xff08;NATURAL JOIN&#xff09;USING连接总结 SQL99语法在SQL92的基础上引入了一些新特性&#xff0c;其中自然连接&#xff08;NATURAL JOIN&#xff09;和USING连接是较为显著的两个特性。 自…

数据结构(14)——哈希表(1)

欢迎来到博主的专栏&#xff1a;数据结构 博主ID&#xff1a;代码小豪 文章目录 哈希表的思想映射方法&#xff08;哈希函数&#xff09;除留余数法 哈希表insert闭散列负载因子扩容find和erase 哈希表的思想 在以往的线性表中&#xff0c;查找速度取决于线性表是否有序&#…

知识库管理系统在企业数字化转型中的作用

引言 在数字化转型的浪潮中&#xff0c;企业正以前所未有的速度重塑其业务模式、运营流程和组织架构&#xff0c;以适应快速变化的市场环境和客户需求。这一过程中&#xff0c;知识库管理系统作为信息整合与知识共享的核心平台&#xff0c;发挥着举足轻重的作用&#xff0c;不…

【解决】AnimationCurve 运行时丢失数据问题

开发平台&#xff1a;Unity 2022 编程平台&#xff1a;Visual Studio 编程语言&#xff1a;CSharp   一、问题背景 如上图所示的 GracityComponent 组件中&#xff0c;引用 AnimationCurve 作为可调属性。但在实际使用中出现数据丢失问题。大致为以下两种情况&#xff1a; 运…