java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢
那么 我们就可以不用每次都真的查询数据库
例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库
在这里插入图片描述
接口返回是这样的
在这里插入图片描述
我们先在启动类 条件装配上 这个接口所在的 controller 类
在这里插入图片描述
然后 整个启动类改成这样

package com.example.webdom;

import com.example.webdom.controller.BookController;
import com.example.webdom.domain.textData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import java.util.Timer;
import java.util.TimerTask;

@SpringBootApplication
@EnableConfigurationProperties({textData.class})
public class WebDomApplication implements ApplicationRunner {

    @Autowired
    private BookController bookController;

    public static void main(String[] args) {
        SpringApplication.run(WebDomApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                bookController.getAll();
            }
        }, 0, 60 * 60 * 1000);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

主要的代码写在了 run函数中 项目启动后会立刻执行
然后 我们定义了一个定时任务 一小时执行一次 调用 bookController.getAll();

然后 我们将 getAll改一下
我们可以 将代码改成这样

private Map<String, ResultUtil> cache = new HashMap<>();

@GetMapping
public ResultUtil getAll() {
    ResultUtil ResultUtil = cache.get("ResultUtil");
    if(ResultUtil == null){
        List<book> BookList = IBookService.list();
        int state = BookList.isEmpty() ? 500 : 200;
        String message = BookList.isEmpty() ? "未获取到对应记录" : "操作成功";
        cache.put("ResultUtil", new ResultUtil(state, BookList, message));
    }
    return ResultUtil;
}
public void removeResultUtil() {
    cache.remove("ResultUtil");
}

这里 我们定义了一个HashMap 键值对集合
然后 getAll的逻辑改为 先去cache中找出ResultUtil字段 如果值不是null 说明 我们这是存储了数据的 直接返回回去就好了
否则 重新走查询逻辑
查询到最后调用 cache.put 将数据再存进去
然后定义了一个removeResultUtil 用来清空ResultUtil的值

然后 我们将启动类的定时器改一下
在每次要调用 getAll 前 先用 removeResultUtil将原来的数据清楚调
在这里插入图片描述
这样 就达到了 按定时任务 一小时更新一次系统数据
将数据存在系统中 不去查数据库 提高查询效率的目的了

当然 还是建议大家使用 Redis
将这种数据放在 Redis 中 然后去查Redis 有没有 一个道理

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

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

相关文章

Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介

文章目录 简介发展历史应用场景 Jenkins 安装部署先决条件硬件要求软件包下载war 包部署linux 系统部署mac 系统部署windows 系统部署安装后基本配置解锁自定义 jenkins 插件创建用户配置更新站点 配置文件 简介 Jenkins前身是 Hudson&#xff0c;使用 java 语言开发的自动化发…

VS2019+OpenCV4.7.0+OpenCV_contrib4.7.0+CUDA安装+配置视频硬解码保姆级别教程

在算法开发过程中&#xff0c;涉及基于opencv的rtsp流硬解码&#xff0c;这里设计结合当前所有的资料&#xff0c;实现了现有opengl相关的所有跟视频硬解码相关的功能&#xff0c;下面对opencv4.7.0的编译流程进行说明&#xff1a; 一、准备工作 下载opencv &#xff1a;open…

Linux服务器搭建笔记-006:拓展/home目录容量

一、问题说明 Ubuntu服务器在使用过程中创建的新用户&#xff0c;每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间&#xff0c;所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下&#xff0c;会很快的填满/home目录&#xff0c;导…

移动应用开发:揭秘内侧APP封装台的高效

在数字化浪席卷下&#xff0c;移应用已经成连接企业与用户纽带。为了抢占市场先机&#xff0c;快速发布高质量的移动应用成为业竞争的关键。侧APP封装平因此而诞生&#xff0c;成为了应开发者的得助手。以下是内侧APP封装台的全面解读&#xff0c;助在应用开发海洋中乘风破浪。…

国产芯片ACL16_S 系列 ,低成本物联网安全,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

松鼠目标检测数据集VOC格式1400张

松鼠是一种可爱的小型哺乳动物&#xff0c;它们属于啮齿动物目&#xff0c;是广泛分布于全球的一类动物。松鼠的外貌非常特别&#xff0c;有着精巧的身体结构和灵活的动作&#xff0c;是森林和城市公园中常见的动物之一。 松鼠通常有中等大小&#xff0c;头部相对较大&#xf…

告别 2023,迎接 2024

告别 2023&#xff0c;迎接 2024 这是 2023 年的最后一篇博客 时间过得可真快啊&#xff0c;仿佛 2023 才刚刚开始&#xff0c;一晃眼&#xff0c;便又接近尾声了 逝者如斯夫&#xff0c;不舍昼夜 现在我一个人坐在实验室中&#xff0c;回想着 2023 发生的种种事情&#xf…

06|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

06&#xff5c;调用模型&#xff1a;使用OpenAI API还是微调开源Llama2/ChatGLM&#xff1f; 让我们带着下面的问题来开始这一节课的学习。大语言模型&#xff0c;不止 ChatGPT 一种。调用 OpenAI 的 API&#xff0c;当然方便且高效&#xff0c;不过&#xff0c;如果我就是想用…

vue3+ts开发干货笔记

总结一下在vue3中ts的使用。当篇记录部分来自于vue官网&#xff0c;记录一下&#xff0c;算是加深印象吧。 纯干笔记&#xff0c;不断补充&#xff0c;想到什么写什么&#xff0c;水平有限&#xff0c;欢迎评论指正&#xff01; 类型标注 props <script setup lang"…

【算法】数论---约数

约数里面的一个重要性质&#xff1a;一个数的约数都是成对存在的(以sqrt(x)为分界线) 一、求一个数的所有约数---试除法 int x; cin>>x; int yue[10000]{0},idx0; for(int i1;i<x/i;i) {if(x%i0){yue[idx]i;cout<<i<<" ";} }for(int iidx-1;i&…

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历&#xff0c;希望能给大家带来一点点启发&#xff01; 阿七毕业于上海一所大学的管理学院&#xff0c;在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看&#xff0c;也很庆幸这次考研失利&#xff0c;因为这个时候对社会一…

现实世界中的人工智能:工业制造的 4 个成功案例研究

现实世界中的人工智能&#xff1a;工业制造的 4 个成功案例研究 从抓鸡翅到建立整个虚拟工厂&#xff0c;各种规模的制造商都利用人工智能以更快的速度、更低的成本和更低的风险生产更多的产品。 我们能否让工厂变得足够聪明&#xff0c;在发生故障之前告诉我们&#xff1f;我…

C语言之指针和函数

目录 作为函数参数的指针 二值互换 scanf函数和指针 指针的类型 空指针 标量型 在C语言程序中&#xff0c;指针的一个重要作用就是作为函数参数使用&#xff0c;下面我们就来学习作为函数参数的指针的相关内容。 作为函数参数的指针 假如我有一个神奇的能力&#xff0c;能…

HTML5和JS实现新年礼花效果

HTML5和JS实现新年礼花效果 2023兔年再见&#xff0c;2024龙年来临了&#xff01; 祝愿读者朋友们在2024年里&#xff0c;身体健康&#xff0c;心灵愉悦&#xff0c;梦想成真。 下面是用HTML5和JS实现新年礼花效果&#xff1a; 源码如下&#xff1a; <!DOCTYPE html>…

Apollo自动驾驶:从概念到现实的里程碑

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo Client2. Apollo Server3. Apollo Federation4. Apollo Tracing5. Apollo Codegen6. Apollo Link7. 其他工具和框架结论 &#x1f680;&#x1f…

插入排序 InsertionSort

插入排序的原理是默认前面的元素都是已经排序好的&#xff0c;然后从后面逐个读取插入到前面排序好的合适的位置&#xff0c;就相当于打扑克的时候每获取一张牌的时候就插入到合适的位置一样。 以{26,53,48,11,13,48,32,15)为例&#xff0c;插入排序的过程如下所示: 动态演示 …

如何实现WinApp的UI自动化测试?

WinApp&#xff08;WindowsAPP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinApp&…

gitee(码云)仓库内容更新,使用TortoiseGit同步本地仓库和远程仓库

前言&#xff1a; 网上有很多同步仓库教程&#xff0c;但都是git命令行操作。这篇使用TortoiseGit可视化操作同步本地仓库和远程仓库 克隆本地仓库&#xff0c;上传远程仓库&#xff0c;下载TortoiseGit可以看这篇使用gitee&#xff08;码云&#xff09;上传自己的代码&#xf…

DFS

目录 DFS 实现数字全排列 N 皇后问题 DFS 算法的理解 优先考虑深度&#xff0c;换句话说就是一条路走到黑&#xff0c;直到无路可走的情况下&#xff0c;才会选择回头&#xff0c;然后重新选择一条路。空间复杂度&#xff1a;O&#xff08;h&#xff09;和高度成正比 不具…

F12开发者工具如何找到对应接口

Web问题定位 1、进入 NetWork页面2、点击Fetch/XHR&#xff0c;这里可以看到页面发起的接口3、找到出问题的接口4、NetWork页面怎么看接口详情5、问题定位 最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。…