《程序猿之Redis缓存实战 · 哈希类型》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗

🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 哈希(Hash)

哈希(Hash)

【结构简介】

1、Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

2、Redis 中 的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,我们也可以直接修改对象中的某些字段值。

【补充:与String比较】

String 结构如果 Value 要存储对象,可以将对象序列化为JSON字符串后存储。当我们要修改对象的某个属性值的时候很不方便,必须取出来,转换JSON对象,修改了,再存进去,或者直接整个覆盖。

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

【应用场景】

1、对象数据存储

举例:用户信息、商品信息、文章信息。

命令:HSET(设置一个/多个字段的值)、HGET(获取单个字段的值)、HMGET(获取多个字段的值)。

点评:如果从数据库查到的实体对象,作为缓存查询,又较少修改的话,直接String类可能更合适。

2、购物车功能

命令:HSET (加购)、HINCR(加数量)、HLEN(获取数量)、HDEL(删除商品)、HGETALL(获取商品)。

点评:算是一个特定场景,购物车的数据也不是很重要,放缓存也合适。

3、双Key的场景

举例:文章的用户评论,某个文章ID作为Key,用户ID作为H-Key,评论内容作为H-Value。

点评:实战中更经常是这类型使用哈希,还是挺多适用的。

【基本指令】

HSET key field value:将哈希表key中的字段field的值设为value
HMSET key field1 value1 [ field2 value2 ]:同时将多个field-value(域-值)对设置到哈希表key中
HVALS key:获取哈希表中所有的值
HDEL key field2 [ field2 ]:删除一个或者多个哈希表字段
HEXISTS key field:查看哈希表中key,指定的字段是否存在
HGETALL key:获取在哈希表中指定key的所有字段和值
----------
HSET key field value	添加或者修改hash类型key的field的值
HGET key field	获取一个hash类型key的field的值
HMSET	批量添加多个hash类型key的field的值
HMGET	批量获取多个hash类型key的field的值
HGETALL	获取一个hash类型的key中的所有的field和value
HKEYS	获取一个hash类型的key中的所有的field
HINCRBY	让一个hash类型key的字段值自增并指定步长
HSETNX	添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
● HVALS key:获取哈希表中所有的值
● HSET key field value:将哈希表key中的字段field的值设为value
● HGET key field:获取存储在哈希表中指定字段的值
● HSETNX key field value:只有在字段field不存在时,设置哈希表字段的值
● HDEL key field2 [ field2 ]:删除一个或者多个哈希表字段
● HEXISTS key field:查看哈希表中key,指定的字段是否存在
● HGETALL key:获取在哈希表中指定key的所有字段和值---------------------------------------------------分隔线---------------------------------------------------
● HINCRBY key field increment:为哈希表key中指定字段的整数值添加上增量increment
● HKEYS:获取所有哈希表中的字段
● HLEN key:获取哈希表中字段的数量
● HMGET key field1 [ field2 ]:获取所有给定字段的值
● HMSET key field1 value1 [ field2 value2 ]:同时将多个field-value(域-值)对设置到哈希表key中
● HSCAN key cursor [ MATCH pattem ] [ COUNT count ]:迭代哈希表中的键值对
● HINCRBYFLOAT key field increment:为哈希表key中指定字段的浮点数值添加上增量increment

【代码示例】

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

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

相关文章

基于Python大数据的音乐推荐及数据分析可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

简易CPU设计入门:取指令(三),ip_buf与rd_en的非阻塞赋值

在开篇,还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&…

jetlinks物联网平台学习4:http协议设备接入

http协议设备接入 1、创建产品2、配置设备接入方式3、配置网络组件4、上传消息协议5、填写网关信息6、配置http认证信息7、配置物模型8、创建设备9、使用apiPost模拟设备接入9.1、设备上线9.2、设备上报属性9.3、设备事件上报 1、创建产品 创建产品 2、配置设备接入方式 点击…

物联网行业中模组的AT指令详解以及使用

01 概述 AT 命令(AT Commands)最早是由发明拨号调制解调器(MODEM)的贺氏公司(Hayes)为了控制 MODEM 而发明的控制协议。后来随着网络带宽的升级,速度很低的拨号 MODEM 基本退出一般使用市场&am…

[深度学习]卷积神经网络CNN

1 图像基础知识 import numpy as np import matplotlib.pyplot as plt # 图像数据 #imgnp.zeros((200,200,3)) imgnp.full((200,200,3),255) # 可视化 plt.imshow(img) plt.show() # 图像读取 imgplt.imread(img.jpg) plt.imshow(img) plt.show() 2 CNN概述 卷积层convrelu池…

技术速递|加入 .NET 智能组件生态系统

作者:Daniel Roth - 首席产品经理 排版:Alan Wang .NET 智能组件是一组示例嵌入式 UI 组件,使得在应用中轻松添加 AI 启用的功能变得更加简单,例如从剪贴板数据自动填写表单、智能文本补全以及语义搜索等场景。.NET 智能组件演示了…

用友U8 CRM 多个接口存在SQL注入漏洞

本文所涉及的任何技术、信息或工具,仅供学习和参考之用,请勿将文章内的相关技术用于非法目的,如有相关非法行为与文章作者无关。请遵守《中华人民共和国网络安全法》。 中华人民共和国网络安全法 第二十七条 规定 任何个人和组织不得从事非…

uniapp 知识点

自定义导航 在page.json navigationstyle":"custom"navigateTo传参 页面传参只能onLoad(option)里面拿 px和upx的关系 在750设计图中,1px1upx 路由 navigateBack返回上一页 重定向 其实就是把当前页面干掉了 公共组件和页面共同点 computed,watc…

Unity中的功能解释(数学位置相关和事件)

向量计算 Vector3.Slerp(起点坐标,终点坐标,t),可是从起点坐标以一个圆形轨迹到终点坐标,有那么多条轨迹,那怎么办 Vector3.Slerp 进行的是沿球面插值,因此并不是沿着严格的“圆形…

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 (Hybrid A* )2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* :时空节…

- 串口通信

USART串口通信 目录 USART串口通信 回顾 USART串口通信 1、通信分类与作用 2、串口通信的相关参数(重点) 3、位协议层 -- RS232协议 4、STM32F103 中的串口外设 5、调试串口编程 -- (1)串口初始化:时钟、IO、…

数据结构:队列及其应用

队列(Queue)是一种特殊的线性表,它的主要特点是先进先出(First In First Out,FIFO)。队列只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删…

某客户Oracle RAC无法启动故障快速解决

某日,9:50左右接到好友协助需求,某个客户Oracle RAC无法启动,并发过来一个报错截图,如下: 和客户维护人员对接后,远程登录服务端进行故障分析。 查看hosts信息,首先进行心跳测试,测…

数据库软题3-专门的集合运算

一、投影(筛选列) 题1 题2 二、选择(筛选行) 三、连接 3.自然连接 题1-自然连接的属性列数(几元关系)和元组数 解析: 题2-自然连接的属性列数(几元关系)和元组数 自然连接后的属性个数 A列…

GNSS定位中自适应调整电离层延迟参数过程噪声的方法

文章目录 前言一、非差非组合PPP模型二、电离层功率谱密度计算三、具体实现方法3.1 不平滑3.2 三阶多项式平滑 参考文献 前言 GNSS定位中不少技术手段如PPP和长基线RTK需要将电离层延迟作为参数估计,电离层延迟的变化通常被描述为随机游走过程,而功率谱密…

解决sortablejs+el-table表格内限制回撤和拖拽回撤失败问题

应用场景: table内同一类型可拖拽,不支持不同类型拖拽(主演可拖拽交换位置,非主演和主演不可交换位置),类型不同拖拽效果需还原,试了好几次el-table数据更新了,但是表格样式和数据不能及时保持…

Linux-df命令使用方法

Linux-df(disk filesystem)命令 df 命令是 Unix 和 Linux 系统中用于报告文件系统磁盘空间使用情况的工具。 df [OPTION]... [FILE]...OPTION 常用选项(博主一般df -h用的较多,可读性较好) -h:以人类可读的…

如何只用 CSS 制作网格?

来源:how-to-make-a-grid-like-graph-paper-grid-with-just-css 在看 用于打印到纸张的 CSS 这篇文章时,对其中的网格比较好奇,作者提供了 stackoverflow 的链接,就看到了来源的这个问题和众多回复。本文从里面挑选了一些个人比较…

docker简介、安装、基础知识

基础知识 Docker简介: 1.Docker是一种用于构建、发布及运行应用程序的开源项目,他通过容器化技术简化了应用程序的部署和管理 2.Docker是一个开源的应用容器引擎,基于go语言开发,为应用打包、部署平台,而非单纯的虚…

【Redis技术进阶之路】「原理分析系列开篇」探索事件驱动枚型与数据特久化原理实现(数据持久化的实现RDB)

揭秘高效存储模型与数据结构底层实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 Redis数据持久化的必要Redis数据持久化的实现RDB的持久化机制RDB文件的创建与载入SAVEBGSAVESAVE与BGSA…