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

图解Redis 06 | Hash数据类型的原理及应用场景

介绍

Hash 类型特别适合存储对象,例如用户信息等。

String类型也可以用于存储用户信息,Hash与String存储用户信息的区别如下图所示:

内部实现

Hash 类型 的底层数据结构是通过压缩列表(Ziplist)或哈希表(Hash Table)实现的:

  • 如果 Hash 类型的元素个数小于 512(默认值,可通过配置 hash-max-ziplist-entries 调整),并且所有值都小于 64 字节(默认值,可通过配置 hash-max-ziplist-value 调整),Redis 会使用压缩列表作为底层数据结构。

  • 如果Hash类型的元素不满足上述条件,那么Redis将会使用哈希表作为Hash类型的底层数据结构。

    在 Redis 7.0 版本中,压缩列表数据结构已经被废弃,取而代之的是 Listpack 数据结构。Listpack 是一种新的压缩数据结构,其目的是提供更好的性能和更高的存储效率。

常用命令

插入单个元素。
hset key field value#示例
> hset myhash k1 v11 
> hset myhash k2 v21
查询单个元素。
hget key field#示例
> hget myhash k2
“v2”
当某个key不存在时,插入数据。
hsetnx key field value#示例
> hsetnx myhash k3 v3
(integer) 1
> hget myhash k3
"v3"

如果尝试插入一个已存在的键,则原始值将不会改变,如下例所示:

> hsetnx myhash k3 val3
(integer) 0
> hget myhash k3
"v3"
删除键中的一个或多个元素。
hdel myhash field [field …]#示例
> hdel myhash k1 v1
(integer) 1

注意:hdel 命令只用于从哈希表中删除一个或多个特定的字段,但它不会删除整个key。如果你想删除整个哈希表,你应该使用 del 命令。

累加某个整数类型的字段值。
hincrby key field increment#示例
> hset myhash k4 4
1
> hincrby myhash k4 2
(integer) 6
> hget myhash k4
"6"

更多操作命令,详见文章末尾。

应用场景

购物车

以用户id为key,以商品sku id为field,以商品数量为value刚好构成了购物车的三个要素,如下图所示。

涉及的命令如下:

#将商品添加到购物车中,{user_id} 是用户的ID,{sku_id} 是商品的SKU ID,1 是初始数量。
HSET cart:{user_id} {sku_id} 1# 增加购物车中某个商品的数量
HINCRBY cart:{user_id} {sku_id} 1# 统计购物车中商品的总数量,即购物车中包含多少个不同的商品。
HLEN cart:{user_id}# 删除商品
HDEL cart:{user_id} {sku_id}# 获取购物车中所有商品信息
HGETALL cart:{user_d}

然而,需要注意的是,这里Redis仅保存了商品SKU ID和数量,而商品的完整信息(如名称、价格、描述等)需要通过商品ID去数据库中查询,以便展示完整的商品信息。

缓存对象

Hash 类型的 (key, field, value) 结构与对象的 (objectid, attribute, value) 结构类似,因此也可以用于存储对象。

我们以用户信息为例,其在关系数据库中的结构是这样的:

我们可以使用下面的命令将用户对象的信息存储到Hash类型中:

> HMSET uid:1 name Jerry age 20
OK> HMSET uid:2 name Tom age 20
OK> HGETALL uid:1
1) "name"
2) "Jerry"
3) "age"
4) "20"

在介绍String类型的应用场景的时候已经介绍过了,String+Json也是一种存储对象的方式,那么在存储对象的时候,到底应该用String+json还是Hash呢?

String + JSON:这种方式将整个对象序列化为一个 JSON 字符串,存储在 Redis 的 String 类型中。这种方法适用于对象结构复杂且整体更新较少的情况。

Hash:这种方式将对象的每个属性存储为 Hash 类型的字段值对。这种方法适用于对象中一些属性频繁变化的情况。

更多hash操作命令

1. 查询一个或多个字段值。
hmget key field [field …]> hmget uid:1 name age
1) "Jerry"
2) "20"
2. 查询某个key的所有字段。
hkeys key> hkeys uid:1
1) "name"
2) "age"
3. 查询某个键的所有字段值。
hvals key> hvals uid:1
1) "Jerry"
2) "20"
4. 对某个浮点型字段进行累加。
hincrbyfloat key field increment> hset floathash k1 1.2
1
> hincrbyfloat floathash k1 2.2
3.4
5. 查询某个字段是否存在。
hexists key field> hexists  floathash k1
(integer) 1

相关文章:

图解Redis 06 | Hash数据类型的原理及应用场景

介绍 Hash 类型特别适合存储对象,例如用户信息等。 String类型也可以用于存储用户信息,Hash与String存储用户信息的区别如下图所示: 内部实现 Hash 类型 的底层数据结构是通过压缩列表(Ziplist)或哈希表&#xff…...

在 Windows 系统上设置 MySQL8.0以支持远程连接

在 Windows 系统上设置 MySQL8.0以支持远程连接的步骤如下: 步骤1: 修改 MySQL 配置文件1. 找到配置文件: MySQL 的配置文件通常为 my.ini,通常位于 C:\ProgramData\MySQL\MySQL Server8.0\(确保查看隐藏文件和文件夹&#xff09…...

四种基本的编程命名规范

目前,共有四种基本的编程命名规范,分别是匈牙利命名法、驼峰式命名法、帕斯卡命名法和下划线命名法,其中前三种命名法较为流行。 例如:iMyData是一个匈牙利命名法;myData是一个驼峰式命名法;MyData是一个帕…...

【前端】在 TypeScript 中使用 AbortController 取消异步请求

在 TypeScript 中使用 AbortController 来取消异步请求,尤其是像 fetch 这样的请求,可以提供一种优雅的方式来中止长时间运行的操作。下面是一个详细的步骤说明,展示如何在 TypeScript 中使用 AbortController 取消 fetch 请求。 步骤 1&…...

k8s知识点总结

docker 名称空间 分类 Docker中的名称空间用于提供进程隔离,确保容器之间的资源相互独立。主要分类包括: PID Namespace:进程ID隔离,使每个容器有自己的进程树,容器内的进程不会干扰其他容器或主机上的进程。 NET Nam…...

论文阅读:三星-TinyClick

《Single-Turn Agent for Empowering GUI Automation》 赋能GUI自动化的单轮代理 摘要 我们介绍了一个用于图形用户界面(GUI)交互任务的单轮代理,使用了视觉语言模型Florence-2-Base。该代理的主要任务是识别与用户指令相对应的UI元素的屏幕…...

Windows on ARM上使用sherpa-onnx实现语音识别

Windows on ARM上使用sherpa-onnx实现语音识别 下载模型准备声音文件测试下载模型 模型所在的地址在这里(),通过git命令将模型下载下来 模型:hfd地址 git clone https://hf-mirror.com/csukuangfj/sherpa-onnx-streaming-paraformer-bilingual-zh-en将如下的代码保存成一个…...

Unity 打包AB Timeline 引用丢失,错误问题

1、裁剪 在 link.xml 添加 <assembly fullname"Unity.Timeline" preserve"all"/> 上面这一步我其实做了&#xff0c;但还是不行&#xff0c;各种搜索&#xff0c;不得解&#xff0c;还有创建一个空的Timeline 放到 Resources目录下的&#xff0c;也…...

【Kettle的安装与使用】使用Kettle实现mysql和hive的数据传输(使用Kettle将mysql数据导入hive、将hive数据导入mysql)

文章目录 一、安装1、解压2、修改字符集3、启动 二、实战1、将hive数据导入mysql2、将mysql数据导入到hive 一、安装 Kettle的安装包在文章结尾 1、解压 在windows中解压到一个非中文路径下 2、修改字符集 修改 spoon.bat 文件 "-Dfile.encodingUTF-8"3、启动…...

STM32的hal库在实现延时函数(例如:Delay_ms 等)为什么用滴答定时(Systick)而不是定时器定时中断,也不是RTC?

STM32的HAL库在实现延时函数&#xff08;如Delay_ms等&#xff09;时选择使用滴答定时器&#xff08;Systick&#xff09;而非定时器定时中断或RTC&#xff08;实时时钟&#xff09;&#xff0c;主要基于以下几个原因&#xff1a; Systick定时器的优势 集成在NVIC中&#xff…...

刚刚买的域名被DNS劫持了怎么处理

在当今数字化的时代&#xff0c;域名作为网络世界的重要标识&#xff0c;对于个人和企业的在线业务都至关重要。然而&#xff0c;有时会遭遇令人头疼的问题&#xff0c;比如新买的域名被DNS劫持。这不仅会影响网站的正常访问&#xff0c;还可能导致用户信息泄露、业务受损等严重…...

递归 算法专题

递归题目技巧 什么是递归 函数自己调用自己的情况为什么会用到递归 本质: 主问题, 可以拆分成相同的子问题 子问题, 又可以拆分出相同的子问题如何理解递归? 宏观的看待递归的过程 1)不要在意递归的细节展开图 2)把递归的函数当成一个黑盒 3)相信这个黑盒一定能够完成这个任务…...

Logstash 迁移索引元数据(设置和映射)

https://help.aliyun.com/zh/es/use-cases/use-logstash-to-migrate-full-or-incremental-data-from-self-managed-elasticsearch-to-alibaba-cloud-elasticsearch 在进行数据迁移时&#xff0c;Logstash会帮助您自动创建索引&#xff0c;但是自动创建的索引可能与您待迁移的索…...

用python将pdf转成图片转换成对应的word文件

*科管系统**报告只能上传word&#xff0c;但是有些盖章文件只有pdf版本&#xff0c;因此有这个需求&#xff0c;目前市面上没这软件&#xff0c;只能自己python写一个。 要将PDF中的页面以图片的形式存储到Word文档中&#xff0c;你需要完成以下几个步骤&#xff1a; 从PDF中…...

list(c++)

list介绍 list是STL容器中的容器&#xff0c;且元素在容器中的位置是分散的并与大小无关。list的底层是双向链表&#xff0c;其优势是在任意位置插入和删除元素的时间复杂度为O(1)&#xff0c;但无法通过“下标[ ]”直接访问元素&#xff0c;需要通过从头&#xff08;尾&#…...

51单片机STC8G串口Uart配置

测试环境 单片机型号&#xff1a;STC8G1K08-38I-TSSOP20&#xff0c;其他型号请自行测试&#xff1b; IDE&#xff1a;KEIL C51&#xff1b; 寄存器配置及主要代码 STC8G系列单片机具有4个全双工异步串行通信接口&#xff1b;本文以串口1为例&#xff0c;串口1有4种工作方式…...

uni-app使用movable-area 实现数据的拖拽排序功能

文档地址 template部分 <movable-area :style"getAreaStyle"><movable-view class"table-row" v-for"v,i in move.list":key"v.id":y"v.y"change"handle_moving"direction"vertical"touchst…...

如何设置使PPT的画的图片导出变清晰

PPT画的流程图另存为图片 插入WORD不清晰的解决办法&#xff1a; 第一步&#xff1a;先调整PPT分辨率 根据此链接修改PPT默认的导出dpi 第二步&#xff1a;新建PPT准备 首先看想要保存的图的尺寸&#xff1a;点击图形-格式-长宽 新建一个ppt-设计-幻灯片大小-自定义大小 …...

和鲸科技 CEO 范向伟受邀揭牌启动南京大学 2024 级大学生人工智能素养大赛

2024 年 10 月 26 日&#xff0c;南京大学第十九届读书节在仙林校区图书馆举行开幕仪式。中国科学院院士、南京大学校长谈哲敏&#xff0c;校党委常委、副校长索文斌&#xff0c;原副校长、关工委主任闵铁军出席仪式&#xff0c;南京大学相关学院和职能部处负责人&#xff0c;以…...

NewStarCTF2024-Week4-Web-WP

目录 1、blindsql2 2、chocolate 3、隐藏的密码 4、ezcmsss 题目对勇师傅来说已经是开始上难度了所以这周没有AK 分享下自己做出来的题的解题思路 1、blindsql2 原本是在继续构造新的 payload&#xff0c;也测到了延时 打算去改上周的脚本&#xff0c;结果去跑的时候忘了将…...

7.企业级开发

一.软件开发的流程二.系统开发环境三.分支设计规范Git Flow模型四.企业级项目管理https://gitee.com/enterprises1.创建项目2.创建项目对应的仓库3.添加成员还可以进行(项目/仓库)成员管理五.开发实战场景1.创建仓库时,一般选生产和开发模型,其他的分支自己创建2.创建新分支:3.…...

基于模型预测控制(MPC)的二自由度机械臂控制仿真模型复现与验证:[文献复现]的实践与结果分析

基于模型预测MPC的二自由度机械臂控制仿真模型【复现】 [1]参考文献&#xff1a;《Model predictive control of a two-link robot arm 》 [2]仿真完全参考给的文献搭建&#xff0c;波形与文献的基本一致二自由度机械臂的MPC控制总带着点"用未来预测现在"的玄学色彩。…...

基于YOLOv12与Flask-SocketIO的番茄成熟度Web端实时检测系统设计与性能对比

1. 为什么需要番茄成熟度实时检测系统&#xff1f; 在农业生产中&#xff0c;番茄成熟度的准确判断直接影响采摘效率和果实品质。传统的人工检测方式存在几个明显痛点&#xff1a;首先&#xff0c;人工判断主观性强&#xff0c;不同工人对"完全成熟"的标准可能不一致…...

System Verilog实战解析——always_comb中的阻塞赋值与电路行为建模

1. always_comb基础概念与特性 always_comb是SystemVerilog中专门用于描述组合逻辑电路的关键字。与传统的always块不同&#xff0c;它不需要显式指定敏感列表&#xff0c;编译器会自动推导所有读取的信号作为敏感列表。我在实际项目中发现&#xff0c;这个特性可以避免手动维护…...

运筹优化算法工程师入门指南:从数学基础到实战项目(附学习资源清单)

运筹优化算法工程师入门指南&#xff1a;从数学基础到实战项目&#xff08;附学习资源清单&#xff09; 运筹优化&#xff08;Operations Research&#xff09;作为一门融合数学建模与工程实践的学科&#xff0c;正在供应链管理、智能制造、交通调度等领域展现出不可替代的价值…...

论文初稿不用熬!Paperzz AI 毕业论文写作:让本科生 4 步搞定万字原创文稿

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 又到毕业季&#xff0c;“写不出论文” 成了本科生朋友圈的高频吐槽&#xff1a;对着空白文档发呆几天&#x…...

想拥有专属的桌面宠物伙伴吗?DyberPet开源框架让个性化养成触手可及

想拥有专属的桌面宠物伙伴吗&#xff1f;DyberPet开源框架让个性化养成触手可及 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾希望电脑桌面上能有一个可爱的虚拟伙伴&a…...

5分钟搞定OpenClaw+百川2-13B:星图平台镜像一键部署指南

5分钟搞定OpenClaw百川2-13B&#xff1a;星图平台镜像一键部署指南 1. 为什么选择云端沙盒体验OpenClaw 上周我在本地尝试部署OpenClaw时&#xff0c;经历了长达3小时的依赖冲突和配置报错。当最终看到"openclaw gateway started"的提示时&#xff0c;我的开发环境…...

OpenClaw本地知识库:nanobot处理私有化文档问答

OpenClaw本地知识库&#xff1a;nanobot处理私有化文档问答 1. 为什么需要本地知识库助手 去年我接手了一个技术文档整理项目&#xff0c;团队积累了超过2000份内部技术文档、会议纪要和产品说明。每次新人入职或者遇到特定技术问题时&#xff0c;我们都要在这些文档里大海捞…...

完整环视系统搭建指南:从零开始快速实现车辆360度全景视图

完整环视系统搭建指南&#xff1a;从零开始快速实现车辆360度全景视图 【免费下载链接】surround-view-system-introduction 项目地址: https://gitcode.com/gh_mirrors/su/surround-view-system-introduction 想要为你的车辆实现专业的360度环视系统吗&#xff1f;sur…...