SpringBoot项目整合Redis作为缓存中间件的详细步骤

news/2024/5/17 7:35:01/文章来源:https://blog.csdn.net/weixin_45941687/article/details/130987086

SpringBoot项目整合Redis作为缓存中间件的详细步骤

  • 1.链接
  • 2.整合步骤
  • 3.测试Demo
  • 4.遇到的问题
  • 5.待考虑问题

有更好的建议,欢迎评论区留言~
有不详细或者不准确的地方,欢迎评论区指正~
有技术群嘛 hahh 可以拉我么 ~

1.链接

哔哩教程视频
Redis官方

2.整合步骤

1.添加pom依赖

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2.配置yml文件
yml配置,安装redis时设置了密码,就需要配置 password

spring:redis:host: 192.168.13.128port: 6379password: 123456

3.使用springBoot自动配置
(RedisAutoConfiguration) 的 redisTemplate/stringRedisTemplate
redis自动配置的源码

3.测试Demo

使用的是自动配置的stringRedisTemplate

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.UUID;@Slf4j
@SpringBootTest
class PuductApplicationTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void  teststringRedisTemplate(){ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();ops.set("我是key","我是value值"+ UUID.randomUUID().toString());String hello = ops.get("我是key");System.out.println("之前保存的:"+ hello);}
}

业务中存取对象

    public Map<String, List<Catalog2Vo>> getCatalogJson() {String catalogJson = redisTemplate.opsForValue().get("catalogJson");if(StringUtil.isEmpty(catalogJson)) {Map<String, List<Catalog2Vo>> catalogJsonDB  = getCatalogJsonFromDB();   //查询数据库catalogJson = JSON.toJSONString(catalogJsonDB); //对象转json字符串redisTemplate.opsForValue().set("catalogJson",catalogJson);return catalogJsonDB;}Map<String, List<Catalog2Vo>> result = JSON.parseObject(catalogJson,new TypeReference<Map<String, List<Catalog2Vo>>>(){});return result;}

4.遇到的问题

压测产生堆外内存溢出 OutOfDirectMemoryError 分析:

1)、SpringBoot2.0 以后默认使用 Lettuce 操作 Redis 的客户端,它使用 Netty 进行网络通信

2)、Lettuce 的 bug 导致 Netty 堆外内存溢出 可设置:-Dio.netty.maxDirectMemory

解决方案:(不能直接使用-Dio.netty.maxDirectMemory去调大堆外内存)

方案内容
方案一升级 Lettuce 客户端。(优点使用 Netty 作为底层网络框架,吞吐量大)
方案二切换使用 Jedis (缺点许久未更新)
如果使用方案二,data-redis 里面排除 lettuce-core
再引入 jedis , springboot 里面有该依赖,所以不用写版本号
		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>

5.待考虑问题

  • 分布式项目,线程数据不一致,加锁问题
  • 缓存击穿、穿透、雪崩问题的解决

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

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

相关文章

区间预测 | MATLAB实现基于QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述…

哔哩哔哩视频云画质与窄带高清AI落地实践

视频赛道卷到下半场&#xff0c;一定会面临体验与成本的对抗&#xff0c;尤其是在行业大环境“过冬”的背景下&#xff0c;想要在有限带宽下获得最佳的画质观感变得异常具备挑战性。从视频云业务场景的视角来看&#xff0c;如何有效解决cross-domain问题、如何突破低业务延迟下…

蓝桥杯单片机PCF8591芯片ADC与DAC运行冲突解决

单片机型号&#xff1a;STC15F2K60S2 目录 文章附上工程下载地址&#xff1a; 在进行ADC与DAC测试时发现了如下冲突&#xff1a; 实验问题发现&#xff1a; 解决方案&#xff1a; 文章附上工程下载地址&#xff1a; https://download.csdn.net/download/qq_64257614/87854…

总结了几百个ChatGPT模型的调教经验,确定不来看看?

目录 前言 chatgpt调教指南 提示词 1.清晰的问题或请求&#xff1a; 2.上下文设置&#xff1a; 3.具体的主题或领域&#xff1a; 4.陈述性问题&#xff1a; 5.追问和澄清&#xff1a; 6.限定问题范围&#xff1a; 角色扮演 充当 Linux 终端 担任产品经理 充当 SQL…

chatgpt赋能python:使用Python编写数据接口:如何让您的网站更具吸引力和效率

使用Python编写数据接口&#xff1a;如何让您的网站更具吸引力和效率 在当今数字时代&#xff0c;大多数公司都希望能够从用户生成的数据中收集和分析信息&#xff0c;以了解他们的客户群体并提高他们的营销策略。为此&#xff0c;开发数据接口成为了一项对于互联网公司不可或…

Java程序设计入门教程 -- 一维数组

目录 一维数组创建 1.声明数组 2.分配数组内存空间 3.数组元素访问 数组初始化 1.静态初始化 2.动态初始化 一维数组的拷贝 1.数组元素的拷贝 2.数组名的拷贝 一维数组创建 1.声明数组 声明一个一维数组的方法很简单&#xff0c;格式如下&#xff1a; 数据类型名[ ] …

茅塞顿开的C#代码——通用型科学计算器

计算器是经常遇到的编程作业。 一般都是实现加、减、乘、除四则运算的普通计算器。 这里介绍用几十行C#代码实现的复杂的《科学计算器》&#xff0c;可以计算各种函数。 不知道其他语言实现同样的功能需要编写多少行代码&#xff1f;20000行&#xff1f; using System; usin…

Linux LNMP(Linux NGINX MySQL PHP)

NGINX处理静态页面性能出色&#xff0c;但是动态页面几乎没有处理能力&#xff0c;比Apache还差 所以涉及动态页面的场合一般由PHP Python Java&#xff08;后缀php&#xff0c;py&#xff0c;jsp&#xff09;等处理 静态页面请求 客户端 -> nginx动态页面请求 …

《水经注地图服务》下载与安装步骤

概述 《水经注地图服务》&#xff08;WeServer&#xff09;是一款可快速发布全国乃至全球海量卫星影像的地图发布服务产品&#xff0c;该产品完全遵循OGC相关协议标准&#xff0c;是一个基于若干项目成功经验总结的产品。它可以轻松发布100TB级海量卫星影像&#xff0c;从而使…

chatgpt赋能python:Python几次方介绍

Python几次方介绍 Python是一种通用编程语言&#xff0c;具有快速开发和易于阅读的优点。Python具有各种强大的功能&#xff0c;包括能够计算数值的能力。本文将介绍Python几次方的相关知识。 Python几次方的语法 要在Python中进行几次方运算&#xff0c;可以使用双星号&…

亚马逊云科技与涂鸦智能持续赋能开发者,推动全行业的数智化创新

近几年&#xff0c;智能产品已渗透至人们生活的方方面面&#xff0c;IoT技术市场规模也随之获得较快增长&#xff0c;据IoT Analytics的数据&#xff0c;2023年IoT市场规模将增长19%&#xff0c;或成为经济波动周期的一大黑马赛道&#xff0c;但下游应用场景与需求的高度碎片化…

chatgpt赋能python:Python利用数据可视化出图,为SEO拓展新思路

Python利用数据可视化出图&#xff0c;为SEO拓展新思路 数据可视化出图在SEO领域中是非常重要的&#xff0c;它不仅能丰富网站内容&#xff0c;还能提高用户体验。而Python语言在数据处理和可视化方面具有很大的优势&#xff0c;让我们一起来看看如何利用Python出图来拓展SEO应…

使用chartgtp写Android代码

<LinearLayout android:layout_width"match_parent" android:layout_height"match_parent" android:orientation"horizontal"> <TextView android:id"id/姓名" …

第三章 JVM内存概述

附录&#xff1a;精选面试题 Q&#xff1a;为什么虚拟机必须保证一个类的Clinit( )方法在多线程的情况下被同步加锁 &#xff1f; A: 因为虚拟机在加载完一个类之后直接把这个类放到本地内存的方法区&#xff08;也叫原空间&#xff09;中了&#xff0c;当其他程序再来调这个类…

线程池的工作原则揭秘:如何合理管理线程数量?

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。在多线程编程中&#xff0c;线程池是一种非常实用的工具&#xff0c;可以帮助我们更好地管理线程&#xff0c;提高程序的性能和稳定性。今天&#xff0c;我将详细介绍线程池的概念、使用方法以及常用参数&…

VUE3中实现游戏摇杆效果

github地址 GitHub - yoannmoinet/nipplejs: A virtual joystick for touch capable interfaces. 演示地址 Nipplejs by yoannmoinet 1.安装nipple npm install nipplejs --save 下面是完整的VUE代码 <el-row> <el-col :span"5"><div id"jo…

15、Redis数据库

1、数据库相关知识简介 1、数据库分类 关系型数据库&#xff1a;Oracle,MySQL,SqlServer,DB2NoSql数据库&#xff1a;NoSQL最常见的解释是“non-relational”&#xff0c; “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念&#xff0c;泛指非关系型的数据库&#xff0c;…

Conditional, Ternary 运算符的使用

1. Conditional 条件运算符的使用 1.1 实现 /// 条件语句 struct ConditionalBootcamp: View {State var showCircle: Bool falseState var showRectangle: Bool falseState var isLoading: Bool falsevar body: some View {//conditionalView1conditionalView2}/// 方式二…

Qt6.5.1+WebRTC学习笔记(八)开发环境搭建(win10+vs2019)

一、准备 1.操作系统win10 64位 2.合理的上网方式&#xff0c;需要正常访问google,最好有20G以上流量 3.安装VS2019&#xff0c;笔者使用的是社区版&#xff0c;并选中C相关&#xff0c;笔者设置如下 注意&#xff0c;win10的sdk需要是10.0.20348.1&#xff0c;其他版本可能…

rt-thread汇总

finish和msh的区别&#xff1f; 这个问题我一直没搞懂&#xff0c;可能得看一下源码才能搞清楚了吧 通过Qemu运行RT-Thread 在windows上通过QEMU快速上手RT-thread smart RT-thread启动流程 rt-thread启动流程 Kconfig语法 Kconfig语法 关于终端的一些问题 终端的管脚配置…