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

news2024/10/7 2:25:06

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.128
    port: 6379
    password: 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 {
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    @Test
    public 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.coloradmin.cn/o/601059.html

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

相关文章

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

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

MFC 状态栏梳理

MFC状态栏梳理 MFC状态栏&#xff0c;觉得挺简单的&#xff0c;但是用的时候总是不得劲&#xff0c;梳理了一下代码。理解通透些。 先说状态栏窗口怎么来的 在MainFrame里面会有一个成员变量&#xff0c;状态栏 m_wndStatusBar protected: // 控件条嵌入成员CMFCMenuBar …

VMware ESXi 8.0U1a 发布 - 领先的裸机 Hypervisor

VMware ESXi 8.0U1a 发布 - 领先的裸机 Hypervisor 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-u1/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023-06-01, VMware vSphere 8.0U1a 发布。 详见&am…

I.MX6ULL_Linux_驱动篇(36) GPIO输入驱动

在前面我们都是使用的 GPIO 输出功能&#xff0c;还没有用过 GPIO 输入功能&#xff0c;本章我们就来学习一下在 Linux 下编写 GPIO 输入驱动程序。我们使用一个 GPIO 加输入驱动程序&#xff0c;同时利用原子操作来对按键值进行保护。 按键驱动和 LED 驱动原理上来讲基本都是…

浅谈TTF字体和Fnt字体的本质和优缺点

前言 本篇在讲什么 浅浅对TTF字体和Fnt字体的本质了解一下 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f449; ♠ 一级标题 &#x1f448; &#x1f449; ♥ 二级标题 &#x1f448…

【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; Java | 从入门到入坟 专属&#xff1a;六月一日 | 儿童节 Java 接口 接口简介 &#x1f383;接口的定义 &#x1f9e7;接口实现类名定义 &#x1f381;接口实现类小案例 &#x1f388;后话 &#x1f3b0; 接口简介 &…

从架构到特性:JuiceFS 企业版首次全面解析

大多数用户是通过社区版初次接触 JuiceFS&#xff0c;企业版对大家来说可能比较陌生。与其他开源项目不同的是&#xff0c;JuiceFS 企业版比社区版更早发布&#xff0c;社区版的架构设计大量参考了企业版。对 JuiceFS 用户而言&#xff0c;这意味着社区版具有更加稳定的特性。 …

onnx模型转 ncnn 模型全连接层输出shape不对问题解决

1.简述 最近在把paddleocr 中cls分类模型通过ncnn部署框架部署时&#xff0c;发现onnx -> ncnn 模型的转换过程中出现问题。因为之前的项目都是使用ncnn框架部署的&#xff0c;只能去解决模型转换问题了。 2. 问题描述与分析 模型在onnx推理代码上正常&#xff0c;当把模型…

Fabric.js 复制粘贴元素

theme: smartblue 本文简介 点赞 关注 收藏 学会了 当你要复制一个 fabric 的元素时&#xff0c;你考虑到的是什么&#xff1f;是深拷贝当前选中对象再添加到画布中&#xff1f; 其实&#xff0c;fabric.js 提供了一个克隆方法&#xff0c;在 fabric.js 官网的案例里也有这个…

自动驾驶赛道回暖?传统Tier1加速入场,真正赢家正在浮出水面

自动驾驶赛道&#xff0c;在经历过去三年的持续降温之后&#xff0c;正在迎来新一轮上升势头。整合、并购、协作&#xff0c;正在成为新一轮产业周期的关键词。 本周&#xff0c;滴滴自动驾驶与法雷奥签署战略合作及投资意向书&#xff0c;法雷奥将对滴滴自动驾驶进行战略投资…

【VMware】局域网里机器A访问机器B内部的vm虚拟机

一、机器B配置 1、打开机器B上面的VMware&#xff0c;在菜单里找到编辑&#xff0c;在编辑里找到“虚拟网络编辑器” 2、选择 net 项&#xff0c;点击NET设置 3、填写主机端口8090&#xff0c;主机端口不要和其它端口冲突就行&#xff0c;这个端口后面会在机器A上面用到 3.1、…

111.(cesium篇)cesium地球自转

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en">

电脑病毒怎么彻底清理?这3个方法可以解决!

案例&#xff1a;电脑中毒无法正常使用怎么办&#xff1f;怎么清理电脑病毒&#xff1f;如何彻底清除病毒&#xff1f;有没有小伙伴知道解决的方法&#xff1f; 在使用电脑的过程中&#xff0c;我们经常会遇到电脑中病毒的情况&#xff0c;它们能够通过各种渠道感染你的计算机…

搭建服务器环境

如果是刚安装好的操作系统 先安装源里的gcc cmake make 等 apt-get install gcc g make cmake autoconf automake libtool 1.gcc 4.8.2 (1)上传gcc 源码在source/下 把gcc-4.8.2.tar.gz放在/home/download/ cd /home/download/ tar -xzvf gcc-4.8.2.tar.gz cd gcc-4.8.2 (2)安…

[POJO]POJO的设计规范Lombok框架

POJO的设计规范 所有用于声明属性的类&#xff0c;都应该遵循以下规范&#xff1a; 存在无参数构造方法 所有属性都是私有权限&#xff08;private&#xff09;的 添加每个属性对应的Setters & Getters 添加基于所有属性的hashCode()与equals() 必须保证&#xff1a;如…

unity | 动画模块之滚动选项框

一、效果动画 如果不是你们想要的&#xff0c;就省的你们继续往下看了 二、作者的话 对于我来说&#xff0c;计算一大堆数据简直太难了&#xff0c;所以自己想了点方法 三、基本功的要求 需要会使用Scroll View 四、进入正题 1.先做一个scrollView把自己想做的东西放进去…

Ubuntu22.04 VirtualBox

Ubuntu22.04 VirtualBox 通常三种虚拟机网络连入模式 桥接网卡 虚拟网卡连入宿主机所在的路由器&#xff0c;公用一个网关地址&#xff0c;自动分配路由器ip到虚拟网卡上&#xff0c;相当于和物理机一样的地址&#xff0c;在同一网段&#xff0c;其他物理机和这个虚拟机一样…

作为一个前端Leader,当你接到一个项目时,应该如何初始化您的项目

1、分析需求 拿到需求后&#xff0c;不是立马动工&#xff0c;我们需要先了解项目的业务需求和用户需求&#xff0c;并明确项目的范围&#xff0c;包括功能点、时间和预算等&#xff0c;来确定项目需求和范围。 2、技术栈选择 根据项目的需求和范围以及团队成员的技术栈&…

aosp12 framework重大bug:contentprovider获取低概率偶现延时10s问题修复经验分享

问题背景&#xff1a; 在android12的版本上&#xff0c;陆陆续续发现一个低概率偶现的问题&#xff0c;那就是桌面第一次启动会存在显示空白10s以上&#xff0c;正常空白一般在1-2s&#xff0c;在个空白10s以上确实就属于非常严重的问题&#xff0c;但这个是一个低概率偶现问题…

Linux - 第21节 - 网络基础(数据链路层)

1.数据链路层 数据链路层解决的问题&#xff1a; • IP拥有将数据跨网络从一台主机送到另一台主机的能力&#xff0c;但IP并不能保证每次都能够将数据可靠的送到对端主机&#xff0c;因此IP需要上层TCP为其提供可靠性保证&#xff0c;比如数据丢包后TCP可以让IP重新发送数据&am…