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 {@Autowiredprivate BookController bookController;public static void main(String[] args) {SpringApplication.run(WebDomApplication.class, args);}@Overridepublic void run(ApplicationArguments args) throws Exception {Timer timer = new Timer();timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic 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 有没有 一个道理

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

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

相关文章

用通俗易懂的方式讲解大模型:使用 LangChain 和大模型生成海报文案

最近看到某平台在推 LangChain 的课程&#xff0c;其中有个示例是让 LangChain 来生成图片的营销文案&#xff0c;我觉得这个示例挺有意思的&#xff0c;于是就想自己实现一下&#xff0c;顺便加深一下 LangChain 的学习。 今天就介绍一下如何使用 LangChain 来实现这个功能&am…

详解Vue3中的鼠标事件mousedown、mouseup和contextmenu

本文主要介绍Vue3中的常见鼠标事件mousedown、mouseup和contextmenu。 目录 一、mousedown——鼠标按下事件二、mouseup——鼠标弹起事件三、contextmenu——页面菜单 下面是Vue 3中常用的鼠标事件mousedown、mouseup和contextmenu的详解。 一、mousedown——鼠标按下事件 mo…

模型 冰山理论

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。冰山下面才是重点。 1 冰山理论的应用 1.1 冰山理论在生活中的常见应用 人际交往&#xff1a;在人际交往中&#xff0c;很多人只关注表面的行为和语言&#xff0c;而忽略了内在的情感和动…

【网络面试(2)】DNS原理-域名和IP地址的查询转换

从上一篇博客我们得知浏览器是如何生成了HTTP消息了&#xff0c;但是浏览器作为应用程序&#xff0c;是不具备向网络中发送请求的能力&#xff0c;而是需要委托给操作系统的内核协议栈来发送请求。在委托协议栈之前&#xff0c;浏览器还要做的一件事情就是将域名转换为IP地址。…

Windows10系统的音频不可用,使用疑难解答后提示【 一个或多个音频服务未运行】

一、问题描述 打开电脑&#xff0c;发现电脑右下角的音频图标显示为X&#xff08;即不可用&#xff0c;无法播放声音&#xff09;&#xff0c;使用音频自带的【声音问题疑难解答】&#xff08;选中音频图标&#xff0c;点击鼠标右键&#xff0c;然后选择“声音问题疑难解答(T)”…

使用频率分析求周期性

通常很难通过观察时间测量值来表征数据中的振荡行为。频谱分析有助于确定信号是否为周期性信号并测量不同周期。 办公楼内的温度计每半小时测量一次室内温度&#xff0c;持续四个月。加载数据并对其绘图。将温度转换为摄氏度。测量时间以周为单位。因此&#xff0c;采样率为 2 …

回首2023: 程序员跳出舒适圈

1 前言 今天的冬日暖阳高照&#xff0c;照耀着我穿着羽绒服的身体&#xff0c;让我感到火一般的燥热&#xff0c;仿佛错觉中已经到了阳春三月。刚刚把孩子洗好&#xff0c;我坐在电脑前&#xff0c;准备整理一下思绪&#xff0c;回顾一下2023年的生活和工作。 2 2023 回顾 回…

拓扑排序

目录 拓扑排序 有向图的拓扑排序 拓扑排序 一个有向图&#xff0c;如果图中有入度为 0 的点&#xff0c;就把这个点删掉&#xff0c;同时也删掉这个点所连的边。 一直进行上面出处理&#xff0c;如果所有点都能被删掉&#xff0c;则这个图可以进行拓扑排序。 举例子&#…

Java技术栈 —— Nginx的使用

Java技术栈 —— Nginx的使用 一、认识Nginx二、搭建Nginx环境2.1 在Ubuntu上安装Nginx 三、使用Nginx3.1 配置负载均衡(HTTP) 一、认识Nginx 企业需要运行多个相同的副本&#xff0c;并将负载分散在整个系统集群上&#xff0c;为了高性能的负载均衡&#xff0c;引入了Nginx代…

深度学习与Apollo自动驾驶:创造智能驾驶的未来

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo缓存层概述2. 缓存策略的重要性3. 缓存策略的配置4. 数据层次结构的管理结论 文章目录 前言1. Apollo缓存层概述2. 缓存策略的重要性3. 缓存策略的…

再薅!Pika全球开放使用;字节版GPTs免费不限量;大模型应用知识地图;MoE深度好文;2024年AIGC发展轨迹;李飞飞最新自传 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f440; 终于&#xff01;AI视频生成平台 Pika 面向所有用户开放网页端 https://twitter.com/pika_labs Pika 营销很猛&#xff0c;讲述的「使…

Zookeeper-Zookeeper应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个 JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要 一种…