在Spring Boot微服务使用HashOperations操作Redis Hash哈希散列
记录:403
场景:在Spring Boot微服务使用RedisTemplate的HashOperations操作Redis Hash哈希散列。
版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5
1.微服务中Redis配置信息
1.1在application.yml中Redis配置信息
spring:redis:host: 192.168.19.203port: 28001password: 12345678timeout: 50000
1.2加载简要逻辑
Spring Boot微服务在启动时,自动注解机制会读取application.yml的注入到RedisProperties对象。在Spring环境中就能取到Redis相关配置信息了。
类全称:org.springframework.boot.autoconfigure.data.redis.RedisProperties
1.3在pom.xml添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置RedisTemplate
2.1配置RedisTemplate
@Configuration
public class RedisConfig {@Bean("redisTemplate")public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {// 1.创建RedisTemplate对象RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();// 2.加载Redis配置redisTemplate.setConnectionFactory(lettuceConnectionFactory);// 3.配置key序列化RedisSerializer<?> stringRedisSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);// 4.配置Value序列化Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);ObjectMapper objMapper = new ObjectMapper();objMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objMapper.activateDefaultTyping(objMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objMapper);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// 5.初始化RedisTemplateredisTemplate.afterPropertiesSet();return redisTemplate;}@Beanpublic HashOperations<String, Object, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}
}
2.2解析
在配置RedisTemplate后,在Spring环境中,可以@Autowired自动注入方式注入操作Redis对象。比如:RedisTemplate、HashOperations。
3.使用HashOperations操作Redis Hash哈希散列
3.1简要说明
使用HashOperations操作Redis Hash哈希散列,常用操作:增、查、改、删、设置超时等。
3.2操作示例
@RestController
@RequestMapping("/hub/example/load")
@Slf4j
public class LoadController {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate HashOperations hashOperations;/*** 操作Hash,使用HashOperations* 对应写命令: HMSET* 对应读命令: HGETALL* 本质就是在一个key对应存储了一个Map*/@GetMapping("/hashOperations")public Object loadData04() {log.info("HashOperations操作开始...");// 1.增hashOperations.put("CityInfo:Hangzhou04", "hangzhou", "杭州");hashOperations.put("CityInfo:Hangzhou04", "suzhou", "苏州");// 2.1查-获取map键值对数据Map resultMap = hashOperations.entries("CityInfo:Hangzhou04");resultMap.forEach((key, value) -> {System.out.println("key=" + key + ",value=" + value);});// 2.2查-获取Map的全部keySet set = hashOperations.keys("CityInfo:Hangzhou04");set.forEach((key) -> {System.out.println("key=" + key);});// 2.3查-获取Map的全部valueList list = hashOperations.values("CityInfo:Hangzhou04");list.forEach((value) -> {System.out.println("value=" + value);});// 3.改hashOperations.put("CityInfo:Hangzhou04", "hangzhou", "杭州-西湖");// 4.1删,(删除指定值)hashOperations.delete("CityInfo:Hangzhou04", "hangzhou", "suzhou");// 4.2删,(删除全部)redisTemplate.delete("CityInfo:Hangzhou04");// 5.设置超时hashOperations.put("CityInfo:Hangzhou04", "hangzhou", "杭州");redisTemplate.boundValueOps("CityInfo:Hangzhou04").expire(5, TimeUnit.MINUTES);redisTemplate.expire("CityInfo:Hangzhou04", 10, TimeUnit.MINUTES);// 6.查询Hash的元素个数Long size =hashOperations.size("CityInfo:Hangzhou04");System.out.println("查询Hash的元素个数,size="+size);log.info("HashOperations操作结束...");return "执行成功";}
}
3.3测试验证
使用Postman测试。
请求RUL:http://127.0.0.1:18205/hub-205-redis/hub/example/load/hashOperations
4.HashOperations接口
4.1接口
HashOperations 是一个接口,默认实现类是DefaultHashOperations。
接口:org.springframework.data.redis.core.HashOperations。
实现类:org.springframework.data.redis.core.DefaultHashOperations。
4.2接口源码
在源码中,查看接口具体方法,可以快速了解该接口具备功能,以便在生产中能根据实际场景对号入座找到合适方法解决实际问题。
public interface HashOperations<H, HK, HV> {Long delete(H key, Object... hashKeys);Boolean hasKey(H key, Object hashKey);@NullableHV get(H key, Object hashKey);List<HV> multiGet(H key, Collection<HK> hashKeys);Long increment(H key, HK hashKey, long delta);Double increment(H key, HK hashKey, double delta);@NullableHK randomKey(H key);@NullableEntry<HK, HV> randomEntry(H key);@NullableList<HK> randomKeys(H key, long count);@NullableMap<HK, HV> randomEntries(H key, long count);Set<HK> keys(H key);@NullableLong lengthOfValue(H key, HK hashKey);Long size(H key);void putAll(H key, Map<? extends HK, ? extends HV> m);void put(H key, HK hashKey, HV value);Boolean putIfAbsent(H key, HK hashKey, HV value);List<HV> values(H key);Map<HK, HV> entries(H key);Cursor<Entry<HK, HV>> scan(H key, ScanOptions options);RedisOperations<H, ?> getOperations();
}
以上,感谢。
2023年4月12日
相关文章:
在Spring Boot微服务使用HashOperations操作Redis Hash哈希散列
记录:403 场景:在Spring Boot微服务使用RedisTemplate的HashOperations操作Redis Hash哈希散列。 版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5 1.微服务中Redis配置信息 1.1在application.yml中Redis配置信息 spring:redis:host: 192.1…...
innobackupex备份mysql产生returned OS error 124
解决使用innobackupex备份mysql产生returned OS error 124 xtrabackup 报错Too many open files 故障处理 一、背景 客户反馈数据库备份失败。 二、环境描述 [rootmes-node1 ~]# mysql -V mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper [root…...
明明有index.jsp文件访问的时候却显示404
重建一下项目...
人工智能前沿——「全域全知全能」人类新宇宙ChatGPT
🚀🚀🚀OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸!!🔥🔥🔥 一、什么是ChatGPT?🍀🍀 ChatGPT是生成型预训练变换模型(Chat G…...
eslint-plugin-import - import/order
eslint-plugin-import是什么? 该插件目的在于支持ES6以上的导入/导出语法,并防止文件路径和导入名称拼写错误的问题。 import/order是什么? 按照约定的规则对引入的模块进行排序。 import/order常用规则介绍 groups 约定引入模块顺序的…...
selenium知识点大全
selenium知识点大全 在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面 browser Chrome()# 关闭浏览器 browser.close()2. 访问指定网页 from selen…...
Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin
Biotin-PEG-SH 生物素-聚乙二醇-巯基 中文名称:生物素-聚乙二醇-巯基 英文名称:Biotin-PEG-SH Biotin-PEG-Thiol 性状:粘稠液体或者固体粉末,取决于分子量 溶剂:溶于水和DCM、DMF等大部分有机溶剂 分子式&#x…...
【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析
简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…...
Python json 数据提取 jsonpath 详解
一、JsonPath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库,和…...
TCP和UDP的区别以及应用场景
区别 首先UDP协议非常简单,头部只有8个字节: 校验和为了提供可靠的UDP首部和数据而设计,防止收到在网络传输中受损的UDP包。 再对比下TCP协议: 传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件…...
高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法
内容:提出一种基于视觉显著性注意机制的超像素自适应检测方法; 设计视觉显著性注意机制滤波器用于粗略定位出缺陷空间范围,结合超像素分块图像分割方法消除光照不均匀引起的噪声干扰,有效地完成缺陷区域的边界分割和实时特征提取&…...
纺织工业库房如何有效防潮?恒温恒湿真的有效吗?
纺织工业库房中的设备或存放的货物对温度或湿度的变化又非常敏感,温度或湿度的波动可能会产生一些问题。 针对库房环境温湿度的监测,若采用人工检测的方式,很难管控精准且工作效率低;其次,人工综合成本高。那么该如何实…...
SDK之动态链接库开发—基本概念
动态链接库(Dynamic Link Library,简称 DLL)是一种在运行时加载的库,可用于在多个应用程序之间共享代码和数据。与静态链接库相比,动态链接库的主要优劣势如下: 优势: 空间效率更高࿰…...
spring生命周期、IOC工作流程、AOP过程,循环依赖、BeanFactory和FactoryBean
1、生命周期 划分为5个阶段: 创建前准备阶段、创建实例阶段、 依赖注入阶段、 容器缓存阶段、销毁实例阶段。一、创建前准备阶段:这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解 析并查找 Bean 有关的扩展…...
小黑子—Java从入门到入土过程:第六章
Java零基础入门6.0Java系列第六章1. 面向对象综合练习1.1 文字版格斗游戏参数占位,格式化输出回顾关于printf和print和println的区别1.2 对象数组练习1.2.1 练习一1.2.2 练习二1.2.3 练习三1.2.4 练习四1.3 键盘录入回顾1.4 复杂对象数组练习1.4.1 复杂练习一1.4.2 …...
python实战应用讲解-【numpy数组篇】常用函数(二)(附python示例代码)
目录 Python numpy.flipud() Python numpy.insert() Python numpy.ravel() Python numpy.shapes() Python numpy.roll() Python numpy.rot90() Python numpy.append() Python numpy.flipud() Python numpy.flipud()函数将数组(每列中的项)按上下方向翻转,但保留形状。…...
windows10 java 创建合约
a. 安装Nodejs 主要是方便使用npm 命令 并配置环境变量 b.使用 npm 可以便捷地安装Solidity编译器solcjs npm install -g solc c.找个目录 创建一个solidity文件 如 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;/*** title Storage* dev Store…...
阿里巴巴获得商品详情 API调用示例
为了进行此平台API的调用,首先我们需要做下面几件事情。 1、 获取一个KEY。 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口,响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具,对接口进…...
企业工程管理系统源码-数字化可视化项目管理平台
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
【C语言】一文带你简单了解C语言
这里写目录标题)引言C语言概述基础语法数据类型运算符循环语句分支语句函数数组指针文件操作内存管理高级特性结构体枚举类型联合体预处理器应用场景操作系统编译器游戏开发嵌入式系统引言 C语言是一种通用的计算机编程语言,具有高效、灵活、可移植等特点…...
hostapd wpa_supplicant madwifi深度解析(十)——WPS帧格式与交互流程详解
1. WPS协议基础与交互流程全景 第一次接触WPS(Wi-Fi Protected Setup)时,很多人会被它"一键连接"的便捷性吸引。但作为开发者,我们需要拨开这层简单的外衣,看看内部精妙的协议设计。WPS本质上是通过标准化的…...
C++多线程编程:为什么compare_exchange_weak比strong更适合循环场景?
C多线程编程:为什么compare_exchange_weak比strong更适合循环场景? 在构建高性能并发系统时,C开发者常常需要在原子操作的精确性和执行效率之间寻找平衡点。compare_exchange系列函数作为无锁编程的核心工具,其强弱两种变体的选择…...
Laf云平台终极灾备指南:如何实现多区域部署与智能故障转移
Laf云平台终极灾备指南:如何实现多区域部署与智能故障转移 【免费下载链接】laf labring/laf: 是一个用于 PHP 的轻量级 AJAX 库,可以方便地在 PHP 应用中实现 AJAX 通信。适合对 PHP、AJAX 库和想要实现 PHP AJAX 通信的开发者。 项目地址: https://g…...
如何用纯C语言征服LeetCode:从零开始的算法学习之旅
如何用纯C语言征服LeetCode:从零开始的算法学习之旅 【免费下载链接】leetcode LeetCode in pure C 项目地址: https://gitcode.com/gh_mirrors/leetcode5/leetcode LeetCode算法题是程序员提升编程能力的重要途径,而使用纯C语言来解决这些问题不…...
handong1587.github.io:深度学习工程师的终极技术资源宝库
handong1587.github.io:深度学习工程师的终极技术资源宝库 【免费下载链接】handong1587.github.io 项目地址: https://gitcode.com/gh_mirrors/ha/handong1587.github.io 在当今人工智能和深度学习快速发展的时代,寻找高质量的技术资源变得至关…...
5个场景下的BiliTools资源管理实战技巧:高效获取与管理B站内容的全攻略
5个场景下的BiliTools资源管理实战技巧:高效获取与管理B站内容的全攻略 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Tre…...
Sentinel-2 Level-2A数据怎么用?从QA60波段解读到实战:去云、计算NDVI/ARVI并导出GeoTIFF
Sentinel-2 Level-2A数据实战指南:从QA60波段解析到植被指数计算全流程 当第一次打开Sentinel-2 Level-2A数据时,很多研究者会被那些看似晦涩的质量波段搞得一头雾水。记得我刚开始处理这些数据时,就曾因为忽略了QA60波段的重要性,…...
Linux文件系统驱动实战:exfat-nofuse跨平台存储解决方案全解析
Linux文件系统驱动实战:exfat-nofuse跨平台存储解决方案全解析 【免费下载链接】exfat-nofuse Android ARM Linux non-fuse read/write kernel driver for exFat and VFat Android file systems 项目地址: https://gitcode.com/gh_mirrors/ex/exfat-nofuse 开…...
告别‘OSError‘:手把手教你为transformers库设置离线/代理模式,稳定加载预训练模型
构建稳定高效的Hugging Face模型加载环境:从原理到实践 当你在深夜赶项目进度时,突然遇到那个令人窒息的红色报错——"OSError: Couldnt connect to https://huggingface.co",这感觉就像在马拉松终点线前被绊倒。作为现代NLP开发的…...
遥感影像裁剪避坑指南:如何用ENVI5.3的Subset功能精准提取县区数据(含背景值设置技巧)
遥感影像裁剪避坑指南:ENVI5.3 Subset功能深度解析与实战技巧 当你在处理县域尺度的遥感影像分析时,是否遇到过裁剪后图像边缘出现黑边、数据丢失或坐标错位的问题?这些看似简单的操作细节,往往成为影响后续分析精度的关键因素。本…...
