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

SpringBoot 2.x 整合 Redis

整合

1)添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 如果没有使用下面给出的工具类,那么就不需要引入 -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.2.4</version>
</dependency>

2)application.xml 配置

spring:redis:database: 0# ip 或者域名host: 192.168.224.128# 密码password: TO6Md91Advf# redis 默认端口是 6379port: 6379

3)配置 RedisTemplate

这里替换序列化器是因为 , RedisTemplate 默认的序列化方案是 JdkSerializationRedisSerializer,它将对象序列化为字节数组。

@Configuration
public class RedisTemplateConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 自定义的string序列化器StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// jackson 序列化器GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// kv 序列化redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setValueSerializer(jsonRedisSerializer);// hash 序列化redisTemplate.setHashKeySerializer(stringRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}

使用例子

1)Redis 使用工具类

public class RedisUtil {@SuppressWarnings("unchecked")private static RedisTemplate<Object, Object> redisTemplate = SpringUtil.getBean("redisTemplate", RedisTemplate.class);/*** 指定键的值增加* @param key 键* @param num  要增加的数* @return*/public static int incrementInt(String key,int num){Long increment = redisTemplate.opsForValue().increment(key,num);return increment.intValue();}/*** 指定缓存失效时间** @param key  键* @param time 时间(秒)*/public static void expire(String key, long time) {if (time > 0) {redisTemplate.expire(key, time, TimeUnit.SECONDS);}}public static long getExpire(String key){return redisTemplate.getExpire(key);}/*** 普通缓存获取** @param key 键* @return 值*/public static Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 获取数据** @param key 键* @return 对应的键值*/public static Map<Object, Object> getMap(String key) {return redisTemplate.opsForHash().entries(key);}/*** 缓存放入** @param key   键* @param value 值*/public static void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}/*** 缓存放入** @param key   键* @param value 值* @param time  时间(秒)*/public static void set(String key, Object value, long time) {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}}/*** Map 缓存放入* @param key  键* @param map  对应多个键值*/public static void putMap(String key, Map<Object, Object> map) {redisTemplate.opsForHash().putAll(key, map);}/*** Map 缓存放入** @param key  键* @param map  对应多个键值* @param time 时间(秒)*/public static void putMap(String key, Map<Object, Object> map, long time) {redisTemplate.opsForHash().putAll(key, map);if (time > 0) {expire(key, time);}}/*** list 缓存放入,尾部添加* @param key 键* @param value 值*/public static void pushList(String key, Object value) {redisTemplate.opsForList().rightPush(key, value);}/*** list 缓存放入,尾部添加, 批量存放 list* @param key* @param list*/public static void pushListAll(String key, List<Object> list) {if (list != null){redisTemplate.opsForList().rightPushAll(key, list);}}/*** 通过 key 获取 list*/public static List<Object> getAllList(String key){return redisTemplate.opsForList().range(key, 0, -1);}}

2)TestRdsController

如果没有使用 lomback,swagger,可以将对应的注解删除掉

/*** 用于测试 rds* @author fei**/
@Slf4j
@RestController
@RequestMapping("/")
@Api(value = "测试 RDS API", tags = {"测试 RDS API"})
public class TestRdsController extends BaseController {@AutowiredTestRdsService testRdsService;@GetMapping(value = "/rds/setString")@OperationLog(name="set String",type = OperationLogType.CREATE)@ApiOperation(value = "set String")public String rdsSetString(@ApiParam(value = "key", required = true) @RequestParam(value = "key")String key,@ApiParam(value = "value", required = true) @RequestParam(value = "value")String value) {testRdsService.rdsSetString(key, value);return "操作成功!");}@GetMapping(value = "/rds/getString")@ApiOperation(value = "get String")public String rdsGetString(@ApiParam(value = "key", required = true) @RequestParam(value = "key")String key) {String value = testRdsService.rdsGetString(key);return value;}@GetMapping(value = "/rds/putMap")@ApiOperation(value = "putMap")public String rdsPutMap(@ApiParam(value = "key", required = true) @RequestParam(value = "key") String key,@ApiParam(value = "name", required = true) @RequestParam(value = "name") String name,@ApiParam(value = "age", required = true) @RequestParam(value = "age") Integer age) {testRdsService.putMap(key, name, age);return "操作成功";}@GetMapping(value = "/rds/getMap")@ApiOperation(value = "getMap")public Map<Object, Object> getMap(@ApiParam(value = "key", required = true) @RequestParam(value = "key") String key) {Map<Object, Object> map = testRdsService.getMap(key);return map;}@GetMapping(value = "/rds/pushList")@ApiOperation(value = "list 缓存放入,尾部添加")public String pushList(@ApiParam(value = "key", required = true) @RequestParam(value = "key") String key,@ApiParam(value = "value", required = true) @RequestParam(value = "value") Object value) {testRdsService.pushList(key, value);return "操作成功";}@GetMapping(value = "/rds/pushAllList")@ApiOperation(value = "将list数据全部放入 list 缓存")public String pushAllList(@ApiParam(value = "key", required = true) @RequestParam(value = "key") String key,@ApiParam(value = "list", required = true) @RequestParam(value = "list") List<Object> list) {testRdsService.pushListAll(key, list);return "操作成功";}@GetMapping(value = "/rds/getAllList")@ApiOperation(value = "通过 key 获取所有 list")public List<Object> getAllList(@ApiParam(value = "key", required = true) @RequestParam(value = "key") String key) {List<Object> allList = testRdsService.getAllList(key);return allList;}}

3)TestRdsService

/**** @author fei* @create 2024/11/20 9:12**/
public interface TestRdsService {void rdsSetString(String key, String value);String rdsGetString(String key);void putMap(String key, String name, Integer age);Map<Object, Object> getMap(String key);void pushList(String key, Object value);void pushListAll(String key, List<Object> list);List<Object> getAllList(String key);}

4)TestRdsServiceImpl

/**** @author fei* @create 2024/11/20 9:12**/
@Service
public class TestRdsServiceImpl implements TestRdsService {@Overridepublic void rdsSetString(String key, String value) {RedisUtil.set(key, value);}@Overridepublic String rdsGetString(String key) {Object o = RedisUtil.get(key);if (o == null){return "";}return (String)o;}@Overridepublic void putMap(String key, String name, Integer age) {Map<Object, Object> map = new HashMap<>();map.put("name", name);map.put("age", age);RedisUtil.putMap(key, map, 10000);}@Overridepublic Map<Object, Object> getMap(String key) {return RedisUtil.getMap(key);}@Overridepublic void pushList(String key, Object value) {RedisUtil.pushList(key, value);}@Overridepublic void pushListAll(String key, List<Object> list) {RedisUtil.pushListAll(key, list);}@Overridepublic List<Object> getAllList(String key) {return RedisUtil.getAllList(key);}}

5)测试

最后可以使用 swagger 或者 Apifox 等工具调用接口测试,或者直接写个测试用例也可以

相关文章:

SpringBoot 2.x 整合 Redis

整合 1&#xff09;添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 如果没有使用下面给出的工具类&#xff0c;那么就不需要引入 -…...

React的API✅

createContext createContext要和useContext配合使用&#xff0c;可以理解为 “React自带的redux或mobx” &#xff0c;事实上redux就是用context来实现的。但是一番操作下来我还是感觉&#xff0c;简单的context对视图的更新的细粒度把控比不上mobx&#xff0c;除非配合memo等…...

什么是全渠道客服中心?都包括哪些电商平台?

什么是全渠道客服中心&#xff1f;都包括哪些电商平台&#xff1f; 作者&#xff1a;开源呼叫中心系统 FreeIPCC&#xff0c;Github地址&#xff1a;https://github.com/lihaiya/freeipcc 全渠道客服中心是一种能够同时接入并处理来自多个渠道客户咨询和请求的综合服务平台。以…...

Jtti:如何知晓服务器的压力上限?具体的步骤和方法

了解服务器的压力上限(也称为性能极限或容量)是确保系统在高负载下仍能稳定运行的重要步骤。这通常通过压力测试(也称为负载测试或性能测试)来实现。以下是详细的步骤和方法来确定服务器的压力上限&#xff1a; 1. 定义测试目标和指标 在进行压力测试前&#xff0c;明确测试目标…...

贪心算法(1)

目录 柠檬水找零 题解&#xff1a; 代码&#xff1a; 将数组和减半的最少操作次数&#xff08;大根堆&#xff09; 题解&#xff1a; 代码&#xff1a; 最大数&#xff08;注意 sort 中 cmp 的写法&#xff09; 题解&#xff1a; 代码&#xff1a; 摆动序列&#xff0…...

SpringBoot,IOC,DI,分层解耦,统一响应

目录 详细参考day05 web请求 1、BS架构流程 2、RequestParam注解 完成参数名和形参的映射 3、controller接收json对象&#xff0c;使用RequestBody注解 4、PathVariable注解传递路径参数 5、ResponseBody&#xff08;return 响应数据&#xff09; RestController源码 6、统一响…...

目标驱动学习python动力

文章目录 迟迟未开始的原因打破思维里的围墙抛砖引玉爬虫 结束词 迟迟未开始的原因 其实我也是很早就知道有python&#xff0c;当时听说这个用于做测试不错&#xff0c;也就一直没有提起兴趣&#xff0c;后来人工智能火了之后&#xff0c;再次接触python&#xff0c;安装好pyth…...

力扣-Hot100-回溯【算法学习day.39】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…...

小熊派Nano接入华为云

一、华为云IoTDA创建产品 创建如下服务&#xff0c;并添加对应的属性和命令。 二、小熊派接入 根据小熊派官方示例代码D6完成了小熊派接入华为云并实现属性上传命令下发。源码&#xff1a;小熊派开源社区/BearPi-HM_Nano 1. MQTT连接代码分析 这部分代码在oc_mqtt.c和oc_mq…...

【linux硬件操作系统】计算机硬件常见硬件故障处理

这里写目录标题 一、故障排错的基本原则二、硬件维护注意事项三、关于最小化和还原出厂配置四、常见故障处理及调试五、硬盘相关故障六、硬盘相关故障&#xff1a;硬盘检测问题七、硬盘相关故障&#xff1a;自检硬盘报错八、硬盘相关故障&#xff1a;硬盘亮红灯九、硬盘相关故障…...

谈学生公寓安全用电系统的涉及方案

‌学生公寓安全 学生公寓安全用电系统的设计方案主要包括以下几个方面‌&#xff1a; ‌电气线路设计‌&#xff1a; ‌合理布线‌&#xff1a;确保所有电气线路按照国家或地区的电气安全标准进行设计&#xff0c;避免线路过载和短路。‌使用阻燃材料‌&#xff1a;选用阻燃或低…...

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Go 语言数组

Go 语言数组 引言 Go 语言是一种静态类型、编译型语言&#xff0c;由 Google 开发&#xff0c;旨在提高多核处理器下的编程效率。数组作为 Go 语言中的一种基本数据结构&#xff0c;提供了存储一系列具有相同类型元素的能力。本文将深入探讨 Go 语言中数组的使用方法、特性以…...

13. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码

这篇文章特别短&#xff0c;短到可以作为一篇文章的一个章节&#xff0c;那让我们开始吧 一、编写代码 我们在代码中标记了大量的TODO标记&#xff0c;并且注明了这里暂时写死&#xff0c;等权限和授权完成后再改为动态获取这句话。那么到目前为止和权限有关的代码已经完成了…...

深入剖析Java内存管理:机制、优化与最佳实践

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 深入剖析Java内存管理&#xff1a;机制、优化与最佳实践 一、Java内存模型概述 1. Java内存模型的定义与作…...

【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB

Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务&#xff0c;专为高性能和可扩展性设计&#xff0c;特别适合需要快速响应和高吞吐量的应用场景&#xff0c;如移动应用、游戏、物联网和实时分析等。 工作原理 Amazon DynamoDB 在任何规模下响应时间一律达毫秒级&#xff…...

Qt-常用的显示类控件

QLabel QLabel有如下核心属性&#xff1a; 关于文本格式的验证&#xff1a; 其中<b>xxx<b>&#xff0c;就是加粗的意思。 效果&#xff1a; 或者再把它改为markdown形式的&#xff1a; 在markd中&#xff0c;#就是表示一级标题&#xff0c;我们在加上##后&#x…...

LabVIEW内燃机缸压采集与分析

基于LabVIEW开发的内燃机缸压采集与分析系统结合高性能压力传感器和NI数据采集设备&#xff0c;实现了内燃机工作过程中缸压的实时监测与分析&#xff0c;支持性能优化与设计改进。文中详细介绍了系统的开发背景、硬件组成、软件设计及其工作原理&#xff0c;展现了完整的开发流…...

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡&#xff08;插上读卡器&#xff09;&#xff0c;将U盘插入主机电脑&#xff0c;右键点击属性&#xff0c;查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标&#xff0c;将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件&#xff1a;/dev/s…...

VScode clangd插件安装

前提 在VScode中写C代码时&#xff0c;总会用到 C/C 这个插件&#xff0c;也就自然而然地使用了这个插件带来的代码跳转和代码提示功能。但是当代码变地很多时&#xff0c;就会变得非常慢。所以经过调查后弃用C/C 插件的这个功能&#xff0c;使用 clangd 这个插件来提示C代码和…...

【机器学习】- L1L2 正则化操作

目录 0.引言1.正则化的基本思想2.L1 正则化3.L2 正则化4.L1 与 L2 正则化的比较5.应用&#xff1a;控制模型复杂度6.超参数 λ \lambda λ 的选择7.总结 0.引言 在机器学习中&#xff0c;正则化是一种通过约束模型参数来控制模型复杂度的技术。它可以有效减少过拟合&#xff…...

Logback实战指南:基础知识、实战应用及最佳实践全攻略

背景 在Java系统实现过程中&#xff0c;我们不可避免地会借助大量开源功能组件。然而&#xff0c;这些组件往往功能丰富且体系庞大&#xff0c;官方文档常常详尽至数百页。而在实际项目中&#xff0c;我们可能仅需使用其中的一小部分功能&#xff0c;这就造成了一个挑战&#…...

基于python的机器学习(三)—— 关联规则与推荐算法

目录 一、关联规则挖掘 1.1 基本概念 1.2 Apriori算法 1.2.1 Apriori算法的原理 1.2.2 Apriori算法的实例 1.2.3 Apriori算法的程序实现&#xff08;efficient-apriori模块&#xff09; 1.3 FP-Growth算法 1.3.1 FP-Growth算法的原理 1.3.2 FP-Growth算法的实例 二、…...

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…...

模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同

很多手游多开玩家都是利用安卓模拟器实现手游多开&#xff0c;但是很多手游会限制ip&#xff0c;导致多开之后封号等问题&#xff0c;模拟器本身没有更换IP的功能&#xff0c;就需要通过第三方软件来实现 安卓模拟器概述 雷电模拟器、夜神模拟器、mum模拟器等都是目前市场上比较…...

hive的存储格式

1&#xff09; 四种存储格式 hive的存储格式分为两大类&#xff1a;一类纯文本文件&#xff0c;一类是二进制文件存储。 Hive支持的存储数据的格式主要有&#xff1a;TEXTFILE、SEQUENCEFILE、ORC、PARQUET 第一类&#xff1a;纯文本文件存储 textfile: 纯文本文件存储格式…...

鸿蒙学习高效开发与测试-应用程序框架(3)

文章目录 1、应用程序框架1、规范化后台进程管理2、原生支持分布式3、支持多设备的统一窗口管理4、 组件共享及面向对象5、逻辑与界面解耦6、灵活扩展机制2、HarmonyOS SDK1、 开放能力 Kit2、开放能力的检索和使用3、 方舟工具链4、前端编译器架构1、应用程序框架 应 用 程 序…...

什么命令可以查看数据库中表的结构

1. MySQL 查看表结构 sql 复制代码 DESCRIBE 表名; 或者&#xff1a; sql 复制代码 SHOW COLUMNS FROM 表名; 更详细的表信息 sql 复制代码 SHOW CREATE TABLE 表名; 2. PostgreSQL 查看表结构 sql 复制代码 \d 表名 列出表的字段及类型 sql 复制代码 SELECT column_name, da…...

django基于python 语言的酒店推荐系统

摘 要 酒店推荐系统旨在提供一个全面酒店推荐在线平台&#xff0c;该系统允许用户浏览不同的客房类型&#xff0c;并根据个人偏好和需求推荐合适的酒店客房。用户可以便捷地进行客房预订&#xff0c;并在抵达后简化入住登记流程。为了确保连续的住宿体验&#xff0c;系统还提供…...

【深度学习|onnx】往onnx中写入训练的超参或者类别等信息,并在推理时读取

1、往onnx中写入 在训练完毕之后&#xff0c;我们先使用torch.onnx.export() 导出onnx模型&#xff0c;然后我们再使用以下代码来往metadata中写入信息&#xff1a; # Metadatad {# stride: int(max(model.stride)),names: model.names,mean : [0,0,0],std : [1,1,1],normali…...

网站建设的主要步骤有哪些/100大看免费行情的软件

点赞再看&#xff0c;养成习惯前言面试官&#xff1a;敖丙你简历上写了你会数据库调优&#xff0c;你都是怎么调优的&#xff1f;敖丙&#xff1a;加索引。面试官&#xff1a;还有么&#xff1f;敖丙&#xff1a;没了。面试官&#xff1a;我们公司的门你知道在哪里吧&#xff0…...

b站网站大全下载/网站seo优化方法

1、声明Bean的注解: Component : 组件,没有明确的角色 Service : 在业务逻辑层(service层)使用 Repository : 在数据访问层(dao层)使用. Controller : 在展现层(MVC--SpringMVC)使用 2、注入Bean的注解: Aautowired : Spring提供的注解. Inject : JSR-330提供的注解…...

网站推广互联网推广/火星时代教育培训机构官网

boostrap依赖jquery&#xff0c;需要在引入boostrap之前引入jquery库...

网站正能量晚上不用下载直接进入/外贸软件排行榜

学生成绩管理系统&#xff08;四&#xff09;&#xff1a;界面优化 一、流程描述 1.首先在进入系统主界面之前&#xff0c;我们需要进行管理员的登录&#xff0c;需要输入管理员的账户和密码&#xff1a; 2.在输入管理员的用户名和密码之后就可以进入到系统的主页面&#xff1a…...

国外免费网站做推广/俄罗斯搜索引擎yandex推广

小哼买书&#xff08;C&Java实现&#xff09; 本篇博客主要是《啊哈&#xff01;算法》的读书笔记&#xff0c;一本很好的算法书&#xff0c;这里做一下记录。 分别利用三种算法解小哼买书问题&#xff0c;主要依据书中代码&#xff0c;顺带写了一下Java语言的实现。 1、桶…...

南阳网站建设大旗电商/宁波企业网站seo

为了保证的可读性&#xff0c;本文采用意译而非直译。想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你&#xff01;注意&#xff1a;自己尝试的时候&#xff0c;Mac(17, pro) 与原文提供的快捷键盘不太一样&#xff0c;mac 对应的 Ctrl 要换成 command做为前端开…...