【Redis】Redis 命令之 Hash

news2024/11/13 8:00:23

文章目录

  • ⛄介绍
  • ⛄命令
  • ⛄RedisTemplate API
  • ⛄应用场景

⛄介绍

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

在这里插入图片描述


String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

keyvalue
snow:user:1{“id”:1, “name”: “Snow”, “age”: 88}
snow:product:1{“id”:1, “name”: “Apple”, “price”: 9999}

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

在这里插入图片描述


⛄命令

Hash 类型的常见命令🌈🌈
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
HVALS:获取一个hash类型的key中的所有的value
HINCRBY:让一个hash类型key的字段值自增并指定步长
HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行


⛄RedisTemplate API

添加 put / putAll

//	初始数据:
template.opsForHash().put("redisHash","name","tom");
template.opsForHash().put("redisHash","age",26);
template.opsForHash().put("redisHash","class","6");

Map<String,Object> testMap = new HashMap();
testMap.put("name","jack");
testMap.put("age",27);
testMap.put("class","1");
template.opsForHash().putAll("redisHash1",testMap);

仅当hashKey不存在时才设置散列hashKey的值。

System.out.println(template.opsForHash().putIfAbsent("redisHash","age",30));
System.out.println(template.opsForHash().putIfAbsent("redisHash","kkk","kkk"));
//结果:
false
true

删除

template.opsForHash().delete("redisHash","name")

判断key是否存在

template.opsForHash().hasKey("redisHash","age")

获取

template.opsForHash().get("redisHash","age")

增加散列hashKey的值(整型)

System.out.println(template.opsForHash().get("redisHash","age"));
System.out.println(template.opsForHash().increment("redisHash","age",1));
//	结果:
26
27

获取key所对应的散列表的key

System.out.println(template.opsForHash().keys("redisHash1"));
//redisHash1所对应的散列表为{class=1, name=jack, age=27}
//结果:[name, class, age]

获取key所对应的散列表的大小个数

template.opsForHash().size("redisHash1");
//redisHash1所对应的散列表为{class=1, name=jack, age=27}
//结果:3

获取整个哈希存储的值

template.opsForHash().values("redisHash");
//	结果:[tom, 26, 6]

获取整个哈希存储

template.opsForHash().entries("redisHash");
//	结果:{age=26, class=6, name=tom}

使用Cursor在key的hash中迭代,相当于迭代器。

Cursor<Map.Entry<Object, Object>> curosr 
	= ops.scan("redisHash", ScanOptions.ScanOptions.NONE);
        while(curosr.hasNext()){
            Map.Entry<Object, Object> entry = curosr.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
//结果:
age:28.1
class:6
kkk:kkk

⛄应用场景

下面列举了几个应用场景:

  • 存储对象: 可以通过hash类型将一个对象的多个属性以键值对(key-value)的形式存储, 方便快捷。举例来说,可以把一个用户的姓名、年龄、邮箱,保存为 Hash 类型,并以用户编号为 Key,这样在更新某一个属性时,就不需要重新写入整个对象。

  • 缓存环境变量:当使用 Redis 来做缓存系统时,我们可以把那些常用的项目配置都放到 Redis 中去,比如域名、端口号、数据库名称、数据库地址的 hash 设置等,利用 Redis hash 的特性,可以使得这些配置很容易被更新,且不会持续占用内存空间。

  • 购物车:购物车是一个经典的以Hash方式实现的例子,每个用户一个购物车,每个购物车用一个哈希来表示。

  • 计数器:如果您想要更灵活地定义一个String类型的计数器(例如,基于某种“维度”进行依次命名),则可以使用Hash。 每个待计数的“块”可以用“键->Value”的方式存储。

  • 存储对象属性:同一个对象的不同属性可以放在同一个hash类型中,例如,把一本书相关信息(作者、出版日期、价格)存成一个哈希。

在这里插入图片描述

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

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

相关文章

java服务-常用技术-生僻函数、方法、技巧

一、字符串操作 1. 需要转义的字符 java字符串中需要转义的特殊字符1. \n 表示换行&#xff1b;2. \t 表示制表符&#xff0c;相当于Table键&#xff1b;3. \ 表示单引号&#xff1b;4. \" 表示双引号&#xff1b;5. \\ 表示一个斜杠“\”。 2. split第二个参数limit的用…

Dynamics 365 DevOps CI/CD之WebResource

对于D365自身的发布&#xff0c;简单点来说就是Solution的发布&#xff0c;复杂一些会涉及周边集成接口等一系列的发布。如果是单纯的Solution的发布的Azure DevOps商店里有很多工具&#xff0c;比如Power DevOps Tools&#xff0c;这个我之前也有博文转载过相关文章&#xff0…

史上最通俗易懂的EWMA(指数加权移动平均)的参数解释以及程序代码

文章目录 一、EWMA&#xff08;指数加权移动平均&#xff09;是什么&#xff1f;二、详细的参数解释3、使用Python pandas库中的ewm()函数实现指数加权移动平均&#xff08;EWMA&#xff09;的示例代码总结 一、EWMA&#xff08;指数加权移动平均&#xff09;是什么&#xff1f…

抢跑智驾AI芯片「新路径」

“胆量”这个词&#xff0c;被后摩智能创始人兼CEO吴强着重提及。 5月10日&#xff0c;后摩智能发布首款存算一体智驾芯片鸿途™H30&#xff0c;以12nm制程实现最高物理算力 256TOPS&#xff0c;典型功耗 35W&#xff0c;成为国内率先落地存算一体大算力 AI 芯片的公司。即&am…

多线程的最最简单的基本了解

引言&#xff1a; 在学习完常规的语法后&#xff0c;我们将进入下一步的学习&#xff0c;而多线程则是被大多数人认为的下一步的学习目标&#xff0c;因为在有了基础的语法大框架后我们都有了对编程的一个基本的认知&#xff0c;而多线程则是开始有了一定的深度。 一、线程的基…

企业电子招标采购系统源码之传统采购模式面临的挑战

采购类型多 采购制度&#xff1a;采购金额、部门、品类的差异导致管理标准不同。 采购流程&#xff1a;从供应商管理、寻源操作到合同签订、订单执行&#xff0c;业务流程长&#xff0c;审批节点多&#xff0c;传统管理透明度低&#xff0c;联动性差。 供应商管理难 寻源&#…

Aixcoder:AI辅助编程工具

【产品介绍】 aixcoder是一款基于深度学习人工智能技术的AI辅助编程工具。提供了一个由各个领域的专业代码训练出来的“虚拟编程专家”&#xff0c;通过与aixcoder进行结对编程&#xff0c;程序员可以感受到工作效率的显著提升。 借助aixcoder的帮助&#xff0c;程序员可以摆脱…

ChatGPT教程 基于Springboot+Spring+MybatisPlus实现gpt3.5接口开发

⛪ ChatGPT教程: 基于SpringbootSpringMybatisPlus实现gpt3.5接口开发 &#x1f680; 文章介绍: 本文基于SpringBootSpringMybatisPlus实现一个响应快速的gpt接口&#xff0c;可通过与前端整合开发对应的前端页面 &#x1f680; 源码获取: 项目中的资料可以通过文章底部小卡片获…

AutoSizer.exe:自动调整窗口大小的便捷工具

AutoSizer.exe是一款实用的桌面应用程序,它旨在帮助用户自动调整窗口大小,提供更好的用户体验。无论您是在使用Windows操作系统进行日常工作还是进行多任务处理,AutoSizer.exe可以简化您的工作流程,提高效率。本文将介绍AutoSizer.exe的下载地址、功能介绍、使用方法以及其…

国考省考行测:增长率,减少率,增长3倍,是3倍,比较增长率直接相除,能除就除,能减就减,看题三要素:时间,关键词,考点

国考省考行测&#xff1a;增长率&#xff0c;减少率&#xff0c;增长3倍&#xff0c;是3倍&#xff0c;比较增长率直接相除&#xff0c;能除就除&#xff0c;能减就减&#xff0c;看题三要素&#xff1a;时间&#xff0c;关键词&#xff0c;考点 2022找工作是学历、能力和运气…

__101对称二叉树------进阶:你可以运用递归和迭代两种方法解决这个问题吗?---本题还没用【迭代】去实现

101对称二叉树 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 101. 对称二叉树 https://leetcode.cn/problems/symmetric-tree/ 完成情况&#xff1a; 解题思路&#xff1a; 递归的难点在于&#xff1a;找到可以…

谈谈包装类与泛型

目录 包装类 基本数据类型与对应的包装类 装箱和拆箱 装箱 拆箱 泛型 什么是泛型 泛型的语法与使用 泛型的编译 擦除机制 泛型的上界 泛型方法 提到泛型的话&#xff0c;我们就先提一下包装类吧&#xff01; 包装类 在Java中&#xff0c;由于基本类型不是继承自Ob…

STC8单片机+基于DMP库解析MPU6050数据+匿名上位机图形化显示

STC8单片机+基于DMP库解析MPU6050数据+匿名上位机图形化显示 📌相关篇《STC8单片机+基于DMP库解析MPU6050数据+vofa+图形化显示》✨该工程代码匹配的是匿名四轴上位机软件的2.6版本通讯协议,所以支持使用2.6版本的,最新的版本不支持。🌿验证对象:STC8H8K64U🌿时钟频率…

产品需求文档|协调、协作和沟通新产品开发的专业指南

「产品需求文档」是一个强大的产品管理工具&#xff0c;被众多敏捷团队推荐&#xff0c;并被一些行业中的大公司使用。 它有助于使团队保持一致&#xff0c;促进长期合作&#xff0c;并向团队成员传达优先必做事项&#xff0c;以完成工作。 如果你还没有开始制作&#xff0c;…

一个有趣的vc1编码器

这里分享一个vc1编码器&#xff0c;下载地址&#xff1a; https://download.csdn.net/download/weixin_43360707/87791898 文件包在附件&#xff0c;打开文件夹&#xff0c;可以看到下面三个文件夹&#xff1a; 因为我们的系统试Linux&#xff0c;所以我们选择Linux(x64). 继…

kubeadm方式搭建的k8s集群升级——2023.05

文章目录 一、概述二、集群概况三、升级集群2.1 确定升级版本2.2 升级Master2.3 升级 Worker 四、验证集群 一、概述 搭建k8s集群的方式有很多种&#xff0c;比如二进制&#xff0c;kubeadm&#xff0c;RKE&#xff08;Rancher&#xff09;等&#xff0c;k8s集群升级方式也各有…

利用android studio 生成 JNI需要的动态库so文件 图文详解

一、环境搭建 1.1 Android studio2021.2.1安装 到官网下载&#xff0c;此处不再陈述 1.2 JNI安装 JNI 是JDK里的内容&#xff0c;电脑上正确安装并配置JDK即可。 1.3 NDK安装 直接在Android studio下载&#xff08;File---->Settings&#xff09; 1.4 编译工具 工具一…

72.建立一个表格组件

本节课我们将实现如下的表格&#xff1a; ● 首先&#xff0c;我们直接用表格元素将这些数据展现出来 <table><tr><td>Chair</td><td>The Laid Back</td><td>The Worker Bee</td><td>The Chair 4/2</td></tr…

数据结构与算法——算法与算法分析

算法与算法分析 初识算法算法的定义算法的描述算法与程序算法的特性算法设计的要求 算法时间效率的度量事前估计法算法时间复杂度的渐进表示法算法时间复杂度案例分析最好、最坏和平均时间复杂度算法的空间复杂度 初识算法 算法的定义 算法&#xff0c;即是对特定问题求解方法…

Winform实现以管理员模式启动并实现修改系统时间

场景 SpringBoot/Java中定时请求并根据服务端响应头的date实现本地Windows修改时间/时间同步(管理员权限问题-bat管理员启动cmd并运行jar)&#xff1a; SpringBoot/Java中定时请求并根据服务端响应头的date实现本地Windows修改时间/时间同步(管理员权限问题-bat管理员启动cmd…