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

SpringBoot使用Redis实现分布式缓存

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SpringBoot 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:SpringBoot使用Redis实现分布式缓存

文章目录

    • springboot使用Redis实现分布式缓存
    • Redis实现主从复制
    • Redis集群的构建

在这里插入图片描述

springboot使用Redis实现分布式缓存

1、环境构建

1.1 通过MybatisX工具逆向功能快速初始化一个工程(springboot+mybatis-plus)

1.2 构建controller层测试各模块的功能

1.3 相同的请求没有实现共享数据,需要开启mybatis的二级缓存

1.4 springboot环境下开启mybatis-plus的二级缓存

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.5编写获取spring工厂的工具类

@Component
public class ApplicationContextUtils implements ApplicationContextAware {private  static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}public static Object getBean(String beanName){return applicationContext.getBean(beanName);}
}

1.6编写Redis缓存类

@Slf4j
public class RedisCache  implements Cache {private final String id;public RedisCache(String id){this.id = id;}// 操作模块的mapper文件的命名空间 唯一标识符@Overridepublic String getId() {log.info("id= {}",id);return this.id;}// 将数据写入redis@Overridepublic void putObject(Object key, Object value) {log.info("===============将查询的数据开始写入缓存===============");RedisTemplate redisTemplate = getRedisTemplate();redisTemplate.opsForHash().put(id, key.toString(), value);log.info("===============将查询的数据写入缓存完毕===============");}// 获取缓存中的数据@Overridepublic Object getObject(Object key) {log.info("============开始从缓存中获取数据=============");RedisTemplate redisTemplate = getRedisTemplate();log.info("============从缓存中获取数据完毕=============");return redisTemplate.opsForHash().get(id, key.toString());}// 移除缓存中的数据@Overridepublic Object removeObject(Object key) {return null;}// 清空缓存@Overridepublic void clear() {log.info("==========清空缓存=============");RedisTemplate redisTemplate = getRedisTemplate();redisTemplate.delete(id);}// 获取缓存的数量@Overridepublic int getSize() {RedisTemplate redisTemplate = (RedisTemplate) 			ApplicationContextUtils.getBean("redisTemplate");redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());int size = redisTemplate.opsForHash().size(id).intValue();return size;}private RedisTemplate getRedisTemplate(){RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());return redisTemplate;}}

1.7Redis中有关联关系缓存数据的处理

@CacheNamespaceRef(DeptMapper.class)  // 引用有关联关系的命名空间
public interface EmpMapper extends BaseMapper<Emp> {}
注:以上设置完成后,两个模块会使用相同的key(命名空间)存储数据到缓存中  

1.8 Redis中key进行摘要算法

DigestUtils.md5DigestAsHex(key.toString().getBytes()) // 通过该操作可以减少key的长度

Redis实现主从复制

1.准备三台已经安装Redis的虚拟机

在这里插入图片描述

2.查看三台虚拟机的ip地址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.通过远程连接工具FinalShell连接

在这里插入图片描述

在这里插入图片描述

4.修改从节点配置文件

启动三台服务器上的redis后,输入一下命令查看redis主从配置状态

info replication

在这里插入图片描述

修改从节点服务器的配置文件redis.conf

replicaof  主机ip 主机redis接口
masterauth 密码

在这里插入图片描述

修改后重启两个从机,在主机和从机分别输入一下命令查看如下:

info replication

在这里插入图片描述

在这里插入图片描述

验证主从架构

在这里插入图片描述

在这里插入图片描述

至此主从架构设置完成

Redis集群的构建

在这里插入图片描述

以上结构的集群构建可以在一台虚拟机环境中进行模拟,首先创建一台已经安装好Redis数据库的虚拟机

在这里插入图片描述

开启虚拟机并在虚拟机的根路径下创建好7000,7001,7002,7003,7004,7005六个文件夹,之后将redis解压目录下的redis.conf配置文件拷贝到以上几个文件夹中,同时按照以下参数完成配置文件的修改

在这里插入图片描述

修改配置文件中的参数

-port 7000 ....  每个文件修改成不同的端口号  因为是在一台虚拟机中进行的模拟
-bind 0.0.0.0  	 或者改成本机的ip地址
-cluster-enable yes  开启集群模式
-cluster-config-file  nodes-port.conf 集群节点配置文件,可加端口 nodes-7000.conf
-cluster-node-timeout 5000 集群节点的超时时间
-appendonly yes            开启AOF持久化机制
-appendonly-aof        持久化文件的名字 修改为不一样的名字 可加端口号  appendonly-7000.aof

以上6个文件夹中文件全部修改完毕之后,可以按照以下指令启动全部的redis节点

在这里插入图片描述

[root@localhost bin]# ./redis-server  /7000/redis.conf
[root@localhost bin]# ./redis-server  /7001/redis.conf
[root@localhost bin]# ./redis-server  /7002/redis.conf
[root@localhost bin]# ./redis-server  /7003/redis.conf
[root@localhost bin]# ./redis-server  /7004/redis.conf
[root@localhost bin]# ./redis-server  /7005/redis.conf

查看redis服务是否已经全部启动成功

ps aux|grep  redis

在这里插入图片描述

全部启动成功之后,执行以下指令,将多个节点组合成集群,同时实现主从备份

./redis-cli  --cluster create     如果有密码可以添加参数 -a 
192.168.253.132:7000 
192.168.253.132:7001  
192.168.253.132:7002 
192.168.253.132:7003 
192.168.253.132:7004
192.168.253.132:7005  
--cluster-replicas 1  主从节点的配比 1:1

在这里插入图片描述

确认集群的主从从节点信息

在这里插入图片描述

输入yes,确认主从节点信息后,输出以下信息,表示集群构建成功

在这里插入图片描述

在这里插入图片描述

使用一下指令登录集群中的任意节点实现数据的操作,查看集群是否可正常工作

./redis-cli -a cyclone -c -h 192.168.220.11 -p 7001   连接-a 表示连接密码  没有可省略
-c 表示集群方式进行启动
-h ip 地址
-p 表示端口号

在这里插入图片描述

如果在springboot项目中连接Redis集群可按照一下方式进行配置

redis:cluster: nodes: 192.168.1.1:6379 ,.....

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

相关文章:

SpringBoot使用Redis实现分布式缓存

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

Three——二、加强对三维空间的认识

Three——二、加强对三维空间的认识 接上个例子我们接着往下看 辅助观察坐标系 THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小&#xff0c;你可以根据需要改变尺寸。 使用方法&#xff1a; // AxesHelper&#xff1a;辅助观察的坐标系 const axesHelper new THRE…...

【Java】Java8接口中方法区别和使用

Java接口说明 jdk1.8之前接口只能是抽象方法。实现接口必须重写所有方法&#xff0c;比较麻烦。在java8中&#xff0c;支持default和static方法&#xff0c;这样&#xff0c;实现接口时&#xff0c;可以选择是否对default修饰的方法重写。 抽象方法 接口当中的抽象方法&#x…...

WPF 控件库Live Charts 折线图多折线比较问题处理

使用Live Charts功能对比多条折线时当Label不是一一对应时会发现折线无法对比如 Labels List<double> list2 new List<double>(); list2.Add(2.1); //x为0.5时 list2.Add(2.2); //x为0.6时 …...

接口优化方案

前言 最近随着国产化热潮&#xff0c;公司的用于营业的电脑全部从windows更换成了某国产化电脑&#xff0c;换成国产化之后&#xff0c;我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后&#xff0c;发现一些…...

《商用密码应用与安全性评估》第二章政策法规2.1网络空间安全形式与商业密码工作

一、国际国内网络空间安全形势 网络空间已成为与陆地、海洋、天空、太空同等重要的人类第五空间。 1.国际形势 网络空间安全纳入国家战略 网络攻击在国家对抗中深度应用 网络空间已逐步深入网络底层固件 2.国内形势 核心技术仍受制于人 信息产品存在巨大安全隐患 关…...

C#实现将文件、文件夹压缩为压缩包

C#实现将文件、文件夹压缩为压缩包 一、C#实现将文件、文件夹压缩为压缩包核心 1、介绍 Title&#xff1a;“基础工具” 项目&#xff08;压缩包帮助类&#xff09; Description步骤描述&#xff1a; 1、创建 zip 存档&#xff0c;该文档包含指定目录的文件和子目录&#xf…...

程序员跳槽,要求涨薪50%过分吗?

如果问在TI行业涨工资最快的方式是什么&#xff1f; 回答最多的一定是&#xff1a;跳槽&#xff01; 前段时间&#xff0c;知乎上这样一条帖子引发了不少IT圈子的朋友的讨论 &#xff0c;有网友提问 “程序员跳槽要求涨薪50%过分吗&#xff1f;” 截图来源于知乎&#xff0c;…...

Java核心技术 卷1-总结-10

Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中&#xff0c;允许类型参数变化。 例如&#xff0c;通配符类型Pair<? extends Employee>表示任何泛型Pair类型&#xff0c;它的类型参数是…...

React Props

state 和 props 主要的区别在于 props 是不可变的&#xff0c;而 state 可以根据与用户交互来改变。 所以&#xff0c;有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。 props 使用 Demo.js &#xff1a; import React from reactfunct…...

【Hello Network】协议

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍下协议并且设计一个简单的网络服务器 协议 协议的概念结构化数据传输序列化和反序列化网络版计算机服务端代码协议定制客户端代码服务线程执…...

零项目零科研,本科排名倒数,一战上岸上海交大电子与通信工程

笔者来自通信考研小马哥23上交819全程班学员 本科就读于哈工大&#xff08;威海&#xff09;&#xff0c;本科成绩很差&#xff0c;专业排名62/99&#xff0c;没有科研&#xff0c;没有实验室&#xff0c;没有项目&#xff0c;连最基本大家都会参加的科技立项我四年也没有参与…...

NOIP模拟赛 T3区间

题目大意 有 n n n个数字&#xff0c;第 i i i个数字为 a i a_i ai​。有 m m m次询问&#xff0c;每次给出 k i k_i ki​个区间&#xff0c;每个区间表示第 l i , j l_{i,j} li,j​到第 r i , j r_{i,j} ri,j​个数字&#xff0c;求这些区间中一共出现了多少种不同的数字。部…...

【Python】如何用pyth做游戏脚本(太简单了吧)

文章目录 前言一、开发前景二、开发流程3.1、获取窗口句柄&#xff0c;把窗口置顶3. 2、截取游戏界面&#xff0c;分割图标&#xff0c;图片比较 二、程序核心-图标连接算法&#xff08;路径寻找&#xff09;四、开发总结五、源码总结 前言 简述&#xff1a;本文将以4399小游戏…...

【Linux】磁盘与文件系统

目录 一、磁盘的物理结构 二、磁盘逻辑抽象 三、文件系统 1、Super Block 2、Group Descriptor Table 3、inode Table 4、Data Blocks 5、inode Bitmap 6、Block Bitmap 四、Linux下文件系统 1、inode与文件名 2、文件的增删查改 2.1、查看文件内容 2.2、删除文件…...

Transformer中的注意力机制及代码

文章目录 1、简介2、原理2.1 什么是注意力机制2.2 注意力机制在NLP中解决了什么问题2.3 注意力机制公式解读2.4 注意力机制计算过程 3、单头注意力机制与多头注意力机制4、代码4.1 代码14.2 代码2 1、简介 最近在学习transformer&#xff0c;首先学习了多头注意力机制&#xf…...

ChatGPT在连续追问下对多线程和双重检查锁模式的理解--已经超越中级程序员

一、问&#xff1a; private static final Map<Method, GZHttpClientResultModel> CACHE_RESULT_MODEL new ConcurrentHashMap<>();public void abc(Method method){cacheResultMode(method);GZHttpClientResultModel model CACHE_RESULT_MODEL.get(method);}pr…...

每天一道大厂SQL题【Day22】华泰证券真题实战(四)

每天一道大厂SQL题【Day22】华泰证券真题实战(四) 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…...

【智能电网】智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

IDEA 创建微服务项目实例

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 关注专栏:C/C++面试通关【精讲】 优质好文持续更新中……🚀🚀🚀 🎈 欢迎小伙伴们点赞👍、收藏⭐、留…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...