SpringBoot+VUE前后端分离项目学习笔记 - 【27 SpringBoot集成Redis】

news2024/12/23 18:16:08

以首页的文件访问作为示例使用Redis
一方面加快用户访问速度
一方面缓解频繁访问数据库的压力


之前每次访问首页都会请求数据库数据

Redis安装以及配置

所需文件
在这里插入图片描述
解压后,双击下述脚本,启动redis
在这里插入图片描述

在这里插入图片描述
可视化软件安装、设置安装路径然后一直点下一步就OK
在这里插入图片描述
在这里插入图片描述
采用软件连接本地Redis【默认端口6379】
在这里插入图片描述
在这里插入图片描述

后台代码

采用Cache实现缓存

pom.xml

添加Cache缓存的依赖

        <!-- cache -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-cache</artifactId>
		</dependency>

SpringBootApplication.java

添加注解@EnableCaching开启缓存
在这里插入图片描述

EchartsController.java

给文件访问的接口添加缓存

    @AuthAccess
    @GetMapping("/file/front/all")
    @Cacheable(value = "files" ,key = "'frontAll'")
    public Result frontAll() {
        return Result.success(fileMapper.selectList(null));
    }

FileController.java

采用Cache实现更新与删除同步【注意要return数据】

实现在后台更新数据后,Cache自动更新/删除,重新设置缓存

    @PostMapping("/update")
    @CachePut(value = "files" ,key = "'frontAll'")
    public Result update(@RequestBody Files files) {
        fileMapper.updateById(files);
        return Result.success(fileMapper.selectList(null));
    }

    @DeleteMapping("/{id}")
    清除一条缓存,key为要清空的数据
    @CacheEvict(value="files",key="'frontAll'")
    public Result delete(@PathVariable Integer id) {
        Files files = fileMapper.selectById(id);
        files.setIsDelete(true);
        fileMapper.updateById(files);
        return Result.success();
    }

采用Redis实现缓存

pom.xml

添加 Redis的依赖

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

application.yml

添加redis配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/joyce?serverTimezone=GMT%2b8
    username: root
    password: 123456
  redis:
    host: 127.0.0.1
    port: 6379

SpringBootApplication.java

注释掉注解@EnableCaching、顺便把之前FileController的Cache涉及注解也注释掉

Constants.java

定义文件的key【因为Redis数据为键值对(key,value),需要靠key来存取数据】

package com.zj.demo.common;

public interface Constants {
    String CODE_200 = "200"; //成功
    String CODE_401 = "401";  // 权限不足
    String CODE_400 = "400";  // 参数错误
    String CODE_500 = "500"; // 系统错误
    String CODE_600 = "600"; // 其他业务异常

    String DICT_TYPE_ICON= "icon";
    String FILES_KEY = "FILES_FRONT_ALL";
}

EchartsController.java

给文件访问的接口请求的数据缓存到Redis

    //操作Json类型数据用字符串RedisTemplate
    private StringRedisTemplate stringRedisTemplate;
==================================================
    @AuthAccess
    @AuthAccess
    @GetMapping("/file/front/all")
//    @Cacheable(value = "files" ,key = "'frontAll'")
    public Result frontAll() {
        // 1. 从缓存获取数据
        String jsonStr = stringRedisTemplate.opsForValue().get(Constants.FILES_KEY);
        List<Files> files;
        if (StrUtil.isBlank(jsonStr)) {  // 2. 取出来的json是空的
            files = fileMapper.selectList(null);  // 3. 从数据库取出数据
            // 4. 再去缓存到redis
            stringRedisTemplate.opsForValue().set(Constants.FILES_KEY, JSONUtil.toJsonStr(files));
        } else {
            // 减轻数据库的压力
            // 5. 如果有, 从redis缓存中获取数据
            files = JSONUtil.toBean(jsonStr, new TypeReference<List<Files>>() {
            }, true);
        }
        return Result.success(files);
    }

FileController.java

采用Cache实现更新与删除同步【注意要return数据】

实现在后台更新数据后,Redis自动更新/删除,重新设置缓存

     @Autowired
    private StringRedisTemplate stringRedisTemplate;
    ===============================================
        //    @CachePut(value = "files", key = "'frontAll'")
    @PostMapping("/update")
    public Result update(@RequestBody Files files) {
        fileMapper.updateById(files);
        flushRedis(Constants.FILES_KEY);
        return Result.success();
    }

    //清除一条缓存,key为要清空的数据
//    @CacheEvict(value="files",key="'frontAll'")
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        Files files = fileMapper.selectById(id);
        files.setIsDelete(true);
        fileMapper.updateById(files);
        flushRedis(Constants.FILES_KEY);
        return Result.success();
    }

    // 设置缓存
    private void setCache(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    // 删除缓存
    private void flushRedis(String key) {
        stringRedisTemplate.delete(key);
    }

页面测试

Cache实现缓存

开启Cache之后后台访问情况

在这里插入图片描述
登录后第一次访问会到数据库查询,再次刷新之后就会从缓存里取,不会再次访问数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cache更新操作@CachePut

采用@CachePut注解,后台更新文件数据,cache会重新访问数据库进行更新操作
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Cache删除操作@CacheEvict

采用@CachePut注解,后台更新文件数据,cache会重新访问数据库进行更新操作
在这里插入图片描述

在这里插入图片描述

Redis实现缓存

采用Redis缓存首页文件数据

首次访问首页,会到数据库里查询数据,然后以键值对形式储存到Redis中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
刷新首页,就不会再去数据库查了,而是从Redis获取
在这里插入图片描述

Redis实现缓存更新

后台上传新的文件,update接口会删除Redis缓存,再次访问首页时frontAll接口会重新向数据库请求数据,并将更新数据存入Redis
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redis实现缓存删除

后台上传新的文件,delete接口会删除Redis缓存,再次访问首页时frontAll接口会重新向数据库请求数据,并将更新数据存入Redis
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

补充

Redis

特点

  • 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
  • 支持事务

优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)
  • 丰富的特性 – Redis还支持publish/subscribe, 通知, key 过期等等特性。

其他详细内容点击这里可见

SpringBoot Cache整合与使用

https://blog.csdn.net/qq_32448349/article/details/101696892
https://www.cnblogs.com/ejiyuan/p/11014765.html

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

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

相关文章

Java OpenJDK 8u362 Windows x64 Installer

文章目录&#xff08;一&#xff09;Azul&#xff08;二&#xff09;Adopt&#xff08;三&#xff09;IBM&#xff08;四&#xff09;Oracle&#xff08;一&#xff09;Azul WEB Page&#xff1a;&#x1f517;Download Azul Zulu Builds of OpenJDK Windows installer&#xf…

一位老测试对测试用例之个人见解

刚入行的时候&#xff0c;看了很多关于测试相关的文章&#xff0c;记得有一篇说到测试用例是测试灵魂让我印象深刻。如今&#xff0c;我入行几年了&#xff0c;越发深感测试用例的设计重要性&#xff0c;可以这么说&#xff0c;测试用例的设计与管理是测试工程师的核心技能。我…

一套计算机网络系统设计方案,包含外网、内网、智能化设备网

一套计算机网络系统设计方案&#xff0c;包含外网、内网、智能化设备网。 弱电工程设计的计算机网络系统一般分为三种&#xff1a;内网、外网、设备网&#xff0c;这三种网络系统如何设计&#xff1f;它们的架构是如何的呢&#xff1f; 计算机网络系统就是利用通信设备和线路将…

面试_Http常见问题

http协议的默认端口 80 应用层有哪些协议 http ,FTP,SMTP,DNS,MQ 在浏览器中输入网址后会发生什么&#xff1a; 首先服务器有自己的ip地址&#xff0c;但ip地址对人来说很难记&#xff0c;所以人会在浏览器里输入域名&#xff0c;然后经过DNS解析为ip,访问对应的服务器 与服务…

内网云盘如何内网穿透实现公网访问

云盘是一种专业的互联网存储工具&#xff0c;是互联网的云技术产物&#xff0c;它通过互联网为企业和个人提供信息的存储、读取、下载等服务&#xff0c;具有安全稳定、海量存储的特点。随着企业信息化发展&#xff0c;云盘系统需求不断扩大&#xff0c;相关系统软件被广泛应用…

自己动手写一个操作系统——loader(1)

前言 上篇文章中&#xff0c;我们写了一个简单的 loader 作为被加载的演示对象。我们知道 loader 是用来加载 kernel 的&#xff0c;今天我们就编写 loader 代码完成这件事情。 实模式下的内存地址 我们计划把 kernel 加载到内存的 0x10000 地址处。 不过面临一个挑战&…

pug模板在Express框架中的集成

在未讲相关的模板引擎之前前面的篇目中所使用的网页页面大多是静态资源的网页内容&#xff0c;如在之前的案例中就使用过 app.use(express.static(path.join(__dirname&#xff0c;public))) &#xff0c;通过在本地上进行搭建服务器之后使用express.static()方法讲public下静态…

uni-app从入门到上天视频教程 23讲 我终于卷完了

大家好&#xff0c;我是锋哥&#xff01;祝大家新年快乐&#xff01; 过年走亲访友&#xff0c;休息了几天&#xff0c;今天把uni-app课程卷完了&#xff0c;23讲&#xff0c;免费基础课程。 uni-app技术介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;…

(免费分享)springboot音乐网站系统

开发工具&#xff1a;eclipse&#xff0c;数据库mysql5.7 jdk1.8技术&#xff1a;springbootmybatis/** * * * */package com.bjpowernode.music.ss.service.impl;import java.util.List;import javax.annotation.Resource;import com.bjpowernode.music.common.AbstractServ…

即时通讯开发之TCP/IP基本概念

在世界上各地&#xff0c;各种各样的电脑运行着各自不同的操作系统为大家服务&#xff0c;这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱 了各地人的口音&#xff0c;让他们无法合作一样。计算机使用者意识到&#xff0c;计算机只是单兵作战并不…

【数据结构】详解顺序表

目录 1.线性表和顺序表 1.线性表 2.顺序表 2.接口的实现 1. 接口1---初始化顺序表 2. 接口2&#xff0c;3---头插&#xff0c;尾插 3. 接口4&#xff0c;5---头删&#xff0c;尾删 4. 接口6&#xff0c;7---插入&#xff0c;删除 5. 接口8---查找 6. 接口9---修改 7.…

什么是HTTPS?为什么要为您的网站购买一个?

HTTPS或安全超文本传输协议是HTTP的安全版本&#xff0c;是一种用于在Web浏览器和网站之间通过Web传输数据的协议。HTTPS通过使用一种称为传输层安全性(TLS)的加密协议对服务器和浏览器之间传递的所有数据进行加密&#xff0c;以提高安全性&#xff0c;该协议前面是SSL&#xf…

【Pytorch项目实战】之人脸检测与识别:基于face_recognition开源人脸识别库

文章目录人脸检测与识别&#xff08;一&#xff09;实战&#xff1a;人脸检测&#xff08;图片&#xff09;&#xff08;二&#xff09;实战&#xff1a;人脸检测与识别&#xff08;视频&#xff09;人脸检测与识别 face_recognition 是开源人脸识别库。Face Recognition官网。…

启科 QuTrunk+Runtime+QuSaaS+亚马逊云科技量子计算编程实战

QuTrunk 是启科量子自主研发的一款免费、开源、跨平台的量子计算编程框架&#xff0c;包括量子编程 API、量子命令转译、量子计算后端接口等。它提供多种量子计算体验&#xff0c;提供本地量子计算 Python 计算后端&#xff0c;提供 OMP 多线程、MPI 多节点并行、GPU 加速等计算…

操作系统权限提升(一)之操作系统权限介绍

前言 操作系统权限提升简称提权,顾名思义就是提升自己在目标系统中的权限。现在的操作系统都是多用户操作系统,用户之间都有权限控制,比如通过Web漏洞拿到的是web进程的权限,往往Web服务都是以一个权限很低的账号启动的,因此通过 Webshell进行一些操作会受到限制,这就需要将其…

Leetcode力扣秋招刷题路-0094

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 94. 二叉树的中序遍历&#xff08;Easy&#xff09; 给定一个二叉树的根节点 root &#xff0c;返回它的 **中序 **遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出…

无线网络概论_4

成帧细节 数据帧&#xff1a;好比802.11中的驮马&#xff0c;负责在工作站直接板运输数据。控制帧&#xff1a;通常能够与数据帧搭配使用&#xff0c;负责区域的清空&#xff0c;信道的取得以及载波监听的维护并于收到数据时给予肯定确认&#xff0c;借此来增加数据传输的可靠…

垃圾收集器必问系列—CMS

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 应该相信&#xff0c;自己是生活的战胜者。——雨果 文章目录CMS简介运作过程CMS的缺陷处理器资源敏感无法处理“浮动垃圾”内存碎片纵观全书《深入理解JVM虚拟机》第三版&#xff0c;在垃圾回收器这一篇章&a…

CMakelists.txt简单介绍

先祝大家开工大吉&#xff0c;这篇策划一下CMakelists.txt&#xff0c;它依托在Cmake里&#xff0c;在大型工程、平台兼容方面非常好用的C项目编译工具&#xff0c;再此先对它做一个简短的介绍。 目录 一、CMakelists.txt简介 二、使用示例 三、总结 一、CMakelists.txt简介…

Eclipse swt环境搭建

通过Eclipse Marketplace安装打开eclipse&#xff0c;点击help&#xff0c;在弹出的框中&#xff0c;选择Eclipse Marketplace。如下所示。。。搜索windows 安装插件一、创建一个SWT项目点击左上角的File - > New -> Other...进入后搜索SWT ,选中在WindowBuilder下的SWT …