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.xdnf.cn/news/1534267.html

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

相关文章

统计/nginx/access.log中每个日志的访问次数,按高到低排列

/nginx/access.log具体内容长这样: 第一个元素就是ip。 awk {print $1} /nginx/access.log | sort | uniq -c | sort -r首先,awk {print $1} /nginx/access.log 从 /nginx/access.log文件的每行中提取出第一个字段。然后,sort 对提取出的第…

【linux-Day3】linux下的基本指令

【linux-Day3】linux下的基本指令 linux下的基本指令📢man:访问linux手册页📢echo:把字符串写入指定文件中📢cat:查看目标文件的内容📢cp:复制文件或目录📢mv&#xff1a…

移动剧院:便携与声学结合的创新空间—轻空间

随着现代文化和娱乐需求的多样化,传统剧院形式已经无法完全满足人们的需求。作为创新型建筑解决方案的代表,移动剧院凭借其独特的便携性和卓越的声学效果,成为了各类文化活动、音乐会、戏剧表演等活动的理想场所。 高效搭建,便捷移…

开源链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序:重塑私域微商新生态

摘要:本文深入探讨在私域环境下,微商借助微信平台获客成本近乎白菜价的现象。分析微信发展带来的市场蓝海以及微商作为开荒者的机遇与挑战。引入开源链动 21 模式、AI 智能名片和 S2B2C 商城小程序,阐述其如何为微商带来新的发展机遇&#xf…

SQL server 6.5升级到SQL server 2019的方法

背景: 对日项目,客户的旧系统的数据库用的是SQL server 6.5,操作系统是windows NT。新系统要求升级到SQL server 2019,查了下资料发现旧系统的版本实在是太久远了,90年代的。 数据库部分的升级思路是这样的&#xff…

55页可编辑PPT | 集团制造企业数字化转型顶层设计方案

这份PPT文档是一份关于集团制造企业数字化转型的顶层业务设计方案。文档详细介绍了企业在后ERP时代面临的挑战,以及如何通过Oracle解决方案来实现数字化转型。 数字化转型的三大要点集中在满足利益相关者的期望,以企业价值为核心引领业务模式的创新&…

SpringBoot整合JDBCTemplate(day34)

1 学习目标 了解JDBCTemplate重点掌握JDBCTemplate常用方法重点掌握SpringBoot项目整个JDBCTemplate重点掌握JDBCTemplate的CRUD操作 2 JDBCTemplate介绍 JDBCTemplate是Spring官方提供的,基于jdbc技术访问数据库的一个API对象。此对象基于模板方法模式&#xff…

无人机应用新纪元:图形工作站配置推荐与硬件解析

低空经济作为国家新兴的战略性产业,正逐步成为经济高质量发展的新动力。据统计,2023年中国低空经济规模达到5059.5亿元,增速为33.8%,预计到2026年有望突破万亿元大关。政府对低空经济的发展高度重视,不仅出台了相关法规…

机器学习特征构建与特征筛选

前言 上一篇文章讲述了原始特征分析和处理,保障后续拿到的是干净的特征变量,但实际这些特征对于建模不一定是有效的,所以需要在原始特征的基础上,结合业务场景做特征变量的衍生,提升数据的表达能力。此外,…

【devops】devops-git之git分支与标签使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

RNN基本介绍

RNN输入和输出不是向量的时候,需要进行向量化。

中国书法—孙溟㠭浅析碑帖《石门颂》

中国书法——孙溟㠭浅析碑帖《石门颂》 《石门颂》是东汉时期的摩崖刻石,属隶属体,全称是《故司隶校尉犍为杨君颂》,建和二年《公元148年》摹刻,记载的内容是杨孟文主持修复褒斜栈道的事迹,因为刻在陕西褒城北石门崖壁…

如何建立一个Webservice WSDL的简单例子(完整例子)

一:根据对方给的wsdl 的接口地址创建Web 的逻辑端口 1:例如这个用C#写的Web 2.我们需要在SAP里建立一个Service Consumers 的服务记得后缀要加?wsdl 2:然后就会生成对应方法的出参 入参 返回的消息根据接口方法来判断 二:如何通过LPCONFIG建立逻辑端口或者通过SOAMANAGER…

系统架构设计师 - 项目管理

项目管理 项目管理(1-3分,案例分析 25分)立项管理 ★盈亏平衡分析 范围管理 ★★时间管理 ★★★★概述前导图法 PDM(单代号网络图)箭线图法 ADM(双代号网络图) 了解关键路径法总时差自由时差 甘特图 成本管理 ★挣值管理概述指数计算 软件质…

actuator字符绕过漏洞在Nginx上的配置

最近遇到了安全部门派发的actuator泄漏漏洞,领导希望不暴露到外网上,对于内网需要认证才可以访问。 要想不暴露到外网上,就需要在网络层面做拦截,比如nginx和apisix上做代理配置。 URI字符绕过的风险背景知识: URI字符绕过是一种安…

Day97 代码随想录打卡|动态规划篇--- 整数拆分

题目(leecode T343): 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 方法: 本题感觉属于有些难度的动态…

【智能流体力学】数值模拟中的稳态和瞬态

在流体力学和数值模拟中, 稳态 (Steady State)意味着流体的物理量(如速度、压力、温度等)不随时间变化。换句话说,在稳态模拟中,系统已经达到了平衡,任何位置上的流场特性都不再随时间发生变化。 其他教程参考:https://doc.cfd.direct/openfoam/user-guide-v12/index…

使用Visual Studio Code配置C/C++开发环境的全面指南

目录 引言 一、准备工作 1. 安装Visual Studio Code 2. 安装C/C编译器 3. 配置环境变量(仅Windows用户) 二、在VS Code中安装C/C扩展 三、创建您的第一个C/C项目 1. 创建项目文件夹 2. 打开项目文件夹 3. 创建源文件 四、配置任务(…

Leetcode3276. 选择矩阵中单元格的最大得分

Every day a Leetcode 题目来源:3276. 选择矩阵中单元格的最大得分 解法1:回溯 每一行最多选1个数字,如果要选,就要保证前面没有选择过该数字,然后将得分累加,传入下一次递归,如果不选&#…