[Redis]Hash类型

news2024/11/25 2:24:23

基本命令

hset命令

设置 hash 中指定的字段(field)的值(value)

返回值:添加的字段的个数(注意是添加的个数,而不包括修改的)

hset key field value [field value ...]

 hget命令

获取 hash 中指定字段的值

返回值:字段对应的值或者 nil

hget key field

 

hexists命令

判断 hash 中是否有指定的字段

返回值:1 表⽰存在,0 表⽰不存在

hexists key field

 

 hdel命令

删除 hash 中指定的字段

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

hdel key field [field ...]

 

hkeys命令

获取 hash 中的所有字段

返回值:字段列表

hkeys key 

hvals命令

获取 hash 中的所有的值

返回值:所有的值

hvals key 

hgetall命令

获取 hash 中的所有字段以及对应的值

返回值:字段和对应的值

hgetall key

 

 hmget命令

⼀次获取 hash 中多个字段的值

返回值:字段对应的值或者 nil

HMGET key field [field ...]

 在使用 hgetall 时,如果哈希元素个数比较多,会存在阻塞 Redis 的可能。如果开发人员只需要获取部分 field,可以使用 HMGET,如果一定要获取全部 field,可以尝试使用 hscan 命令,该命令采用渐进式遍历哈希类型

 hlen命令

获取 hash 中的所有字段的个数,(返回键值对的个数)

返回值:字段个数

hlen key

 

hsetnx命令

在字段不存在的情况下,设置 hash 中的字段和值

返回值:1 表示设置成功,0 表示失败

hsetnx key field value

 

hincrby命令

将 hash 中字段对应的数值添加指定的值

返回值:该字段变化之后的值 

hincrby key field increment

hincrbyfloat命令

hincrby的浮点数版本

返回值:该字段变化之后的值

hincrbyfloat key field increment 

 

 

内部编码

哈希的内部编码有两种:

• ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个) 同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现,ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比 hashtable 更加优秀。

• hashtable(哈希表):当哈希类型无法满足 ziplist 的条件时,Redis 会使用 hashtable 作为哈希 的内部实现,因为此时 ziplist 的读写效率会下降,而 hashtable 的读写时间复杂度为 O(1)。

 

 总结:

默认设置下,通常内部编码是ziplist,当有value大于64字节时,内部编码会转换为 hashtable,或者field超过512个时,内部编码也会转换为 hashtable

使用场景

存储用户信息

结构

相比于使用 JSON 格式的字符串缓存用户信息,哈希类型变得更加直观,并且在更新操作上变得 更灵活。可以将每个用户的 id 定义为键后缀,多对 field-value 对应用户的各个属性

 

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

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

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

缓存方式

1.原生字符串类型⸺使用字符串类型,每个属性一个键。

set user:1:name James

set user:1:age 23

set user:1:city Beijing

优点:实现简单,针对个别属性变更也很灵活。

缺点:占用过多的键,内存占用量较大,同时用户信息在 Redis 中比较分散,缺少内聚性,所以这种方案基本没有实用性。 

2.序列化字符串类型,例如 JSON 格式 

set user:1 经过序列化后的用户对象字符串

优点:针对总是以整体作为操作的信息比较合适,编程也简单。同时,如果序列化方案选择合适,内存的使用效率很高。

缺点:本身序列化和反序列需要一定开销,同时如果总是操作个别属性则非常不灵活。 

 3.哈希类型

hmset user:1 name James age 23 city Beijing

优点:简单、直观、灵活。尤其是针对信息的局部变更或者获取操作。

缺点:需要控制哈希在 ziplist 和 hashtable 两种内部编码的转换,可能会造成内存的较大消耗。 

 

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

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

相关文章

ChatGPT-4o 有何特别之处?

文章目录 多模态输入,多模态输出之前的模型和现在模型对比 大家已经知道,OpenAI 在 GPT-4 发布一年多后终于推出了一个新模型。它仍然是 GPT-4 的一个变体,但具有前所未见的多模态功能。 有趣的是,它包括实时视频处理等强大功能&…

Ubuntu (18.04) _Mysql (8.0.X)设置密码强度

首先 查看是否有密码强度插件: SHOW PLUGINS; 如果没有,则安装 install plugin validate_password soname validate_password.so; 再次查看,会看到密码强度插件已开 其次 查看密码强度具体配置 show variables like validate_password%; validate…

QT 欧姆龙 fins协议 上位机程序

一个根据欧姆龙的FINS协议制作的上位机读取程序,功能如下: 能够增加、编辑、删除PLC的名称、IP地址与端口号。取编辑时间最新的六台显示在主界面中。数据存入 MYSQL 数据库,可以修改数据库名称、IP地址、端口号、登陆用户与密码。设置数据存…

eNSP学习——OSPF的DR与BDR

目录 相关命令 原理概述 实验内容 实验目的 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建基本的OSPF网络 3、查看默认情况下的DR/BDR状态 4、根据现网需求影响DR/BDR选举 相关命令 [R4]int g0/0/0 [R4-GigabitEthernet0/0/0]ospf network-type p2mp //在接…

如何识别并选择正规、优质的外汇交易平台?

外汇市场的日益繁荣吸引了越来越多的投资者,但同时也带来了众多外汇平台的涌现。如何在这些平台中筛选出正规、可信的平台,成为了每位外汇交易者必须面对的首要问题。以下,我们将为您揭示如何鉴别外汇平台真伪的几个关键方法: 首先…

移动端性能测试(android/ios)

solox官网 https://github.com/smart-test-ti/SoloX solox简介 实时收集android/ios性能的工具,Android设备无需Root,iOS设备无需越狱。有效解决Android和iOS性能的测试和分析挑战。 solox安装 环境准备 python安装3.10以上的 python官网下载地址…

Oracle Hint /*+APPEND*/插入性能总结

oracle append用法 Oracle中的APPEND用法主要用于提高数据插入的效率。 基本用法:在使用了APPEND选项后,插入数据会直接加到表的最后面,而不会在表的空闲块中插入数据。这种做法不需要寻找freelist中的free block,从而避免了在…

Facebook代运营 | Facebook广告投放步骤及要点

Facebook体量大,素材的更新频率快,通过Facebook进行广告投放的用户也越来越多,Facebook坐拥大量用户,同时有着非常科学的用户画像构建系统和推送机制,对于很多广告涉足的伙伴来说,更加的友好。 1. 创建广告…

2024.5.29晚训参考代码

因为本套题没有BFS例题&#xff0c;所以我先把BFS模板放着 #include<bits/stdc.h> using namespace std; int n,m;//n*m的棋盘 int dis[402][402]; bool vis[402][402]; int X[]{-2,-2,-1,-1,1,1,2,2};//偏移量的表 int Y[]{-1,1,-2,2,-2,2,-1,1};//定义一个数组&…

【工具】 MyBatis Plus的SQL拦截器自动翻译替换“?“符号为真实数值

【工具】 MyBatis Plus的SQL拦截器自动翻译替换"?"符号为真实数值 使用MyBatis的配置如下所示&#xff1a; mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl调用接口&#xff0c;sql日志打印如下&#xff1a; 参数和sql语句不…

Docker的数据管理(数据卷+数据卷容器)

文章目录 一、Docker的数据管理1、概述2、主要的技术&#xff08;三种数据挂载方式&#xff09;2.1、数据卷&#xff08;Volumes&#xff09;2.2、绑定挂载&#xff08;Bind mounts&#xff09;2.3、tmpfs挂载&#xff08;Tmpfs mounts&#xff09;2.4、之间的关系&#xff08;…

DBeaver连接Oracle报错:ORA-12514

Listener refused the connection with the following error:ORA-12514, TNS:listener does not currently know of service requested inconnect descriptor ———————————————— 1.报错信息2.配置正确结语 ———————————————— 如果是第一次连接Or…

「51媒体」媒体邀约全攻略

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约全攻略可以概括如下&#xff0c;以确保流程的清晰性和完整性&#xff1a; 一、前期准备 明确目标&#xff1a;清晰定义活动的目标&#xff0c;例如增加曝光度、提高知名度、塑造…

FinalShell 配置SSH密钥登陆

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/139355489 文章目录 前言生成密钥服务器配置公钥本地配置私钥存储私钥FinalShell配置 总结 前言 本机FinalShell 配置SSH密钥登陆服务器&#xff0c;这样就不再需要使用密码进行登陆了。由于FinalSh…

【2024新版】银系统源码/超市收银系统/智慧新零售/ERP进销存管理/线上商城/商户助手

>>>系统简述&#xff1a;本系统适用于超吃便利店&#xff0c;美妆母婴行业&#xff0c;服装鞋帽行业&#xff0c;食品零售行业&#xff0c;3C数码电子行业&#xff0c;食品生鲜等一切零售行业&#xff0c;产品功能角色介绍如下 合伙人&#xff1a;无限发展代理商和商…

说明白计算机网络之TCP的流量控制与拥塞控制之慢开始算法与拥塞避免算法

TCP的流量控制 利用滑动窗口实现流量控制 设A向B发送数据&#xff0c;连接建立时候&#xff0c;B告诉A自身的接收窗口大小&#xff0c;A的发送窗口大小不能超过接收方B的窗口大小 流量控制&#xff1a;发送方发送速率不要太快&#xff0c;要让接收方来得及接收。窗口大小的单…

相对论真的很难理解吗?其实一点也不难,原理就在你我身边!

相对论&#xff0c;一个听起来就充满神秘色彩的名词&#xff0c;它在科学界的地位举足轻重&#xff0c;被誉为现代物理的基石。或许你并不了解相对论&#xff0c;但大概率应该听说过。 不过对于大多数人来说&#xff0c;相对论似乎总是笼罩在一层难以穿透的迷雾之中&#xff0c…

未来工厂新篇章:大型工厂3D可视化技术引领工业新潮流

在科技日新月异的今天&#xff0c;大型工厂不再是我们印象中机器轰鸣、尘土飞扬的钢铁丛林&#xff0c;而是变成了智慧与效率并存的现代化生产中心。这一切的改变&#xff0c;都离不开一项革命性的技术——3D可视化。 一、何为大型工厂3D可视化&#xff1f; 大型工厂3D可视化&…

VRTK4.0学习——(一)

此开发基于Unity 6000.0.0f1 1.导入VRTK v4 Tilia Package Importer.unitypackage包 2.在PackManager中查看配置是否正确 3.点击 Window→Tilia→Package Importer 打开面板后点击 Add Scoped Registry 4.首先我们先将CameraRigs导入,CameraRigs中主要是启动VR头盔的功能&…

Web前端三大主流框:React、Vue 和 Angular

在当今快速发展的 Web 开发领域&#xff0c;选择合适的前端框架对于项目的成功至关重要。React、Vue 和 Angular 作为三大主流前端框架&#xff0c;凭借其强大的功能和灵活的特性&#xff0c;赢得了众多开发者的青睐。本文将对这三大框架进行解析&#xff0c;帮助开发者了解它们…