【SpringBoot】Guava包Cache缓存的使用

文章目录

    • 引言
    • 步骤
      • 添加 Guava 依赖
      • 创建缓存
      • 实现缓存逻辑
      • 结合数据库

引言

场景:通过Guava Cache对DB中的数据进行缓存应用。
优点:使用 Guava Cache 结合数据库进行缓存,可以显著提高应用的性能,减少对数据库的频繁访问。

步骤

  • 添加 Guava 依赖
  • 创建缓存
  • 实现缓存逻辑
  • 结合数据库

添加 Guava 依赖

首先,在你的项目中添加 Guava 依赖。如果你使用的是 Maven,添加以下依赖到你的 pom.xml 文件中

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>29.0-jre</version> 
</dependency>
// springboot环境版本:2.1.15

创建缓存

使用 CacheBuilder 来创建缓存实例。可以根据需要配置缓存的大小、过期时间等。

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;import java.util.concurrent.TimeUnit;public class CacheExample {// 创建缓存实例private static final Cache<String, Object> cache = CacheBuilder.newBuilder().maximumSize(1000) // 最大缓存条目数.expireAfterWrite(10, TimeUnit.MINUTES) // 缓存过期时间.build();public static Cache<String, Object> getCache() {return cache;}
}

实现缓存逻辑

创建一个方法来处理从缓存加载数据的逻辑。如果缓存中没有数据,则从数据库加载并放入缓存中。

import java.util.Optional;public class DataService {// 模拟数据库访问方法private Object getDataFromDatabase(String key) {// 这里实现从数据库获取数据的逻辑return new Object(); // 示例返回值}// 从缓存或数据库获取数据public Object getData(String key) {Cache<String, Object> cache = CacheExample.getCache();// 从缓存中获取数据Object value = cache.getIfPresent(key);if (value == null) {// 如果缓存中没有数据,从数据库获取value = getDataFromDatabase(key);// 将数据放入缓存cache.put(key, value);}return value;}
}

结合数据库

将缓存逻辑与数据库访问结合起来。如下示例展示了如何使用缓存来减少对数据库的频繁访问。

public class Main {public static void main(String[] args) {DataService dataService = new DataService();// 第一次访问,缓存中没有数据,从数据库加载Object data1 = dataService.getData("key1");System.out.println("First access: " + data1);// 第二次访问,缓存中有数据,直接从缓存获取Object data2 = dataService.getData("key1");System.out.println("Second access: " + data2);// 模拟一段时间后,缓存过期,再次从数据库加载try {Thread.sleep(11 * 60 * 1000); // 等待 11 分钟} catch (InterruptedException e) {e.printStackTrace();}Object data3 = dataService.getData("key1");System.out.println("After cache expiration: " + data3);}
}

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

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

相关文章

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI&#xff1a;频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天&#xff0c;大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量&#xff0c;我们通常在家里或者机场&#xff0c;商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…

入门车载以太网(4) -- 传输层(TCP\UDP)

目录 1.ECU通信方式的变化 2.传输层概述 2.1 UDP 2.2 TCP 3. TCP和ISO 15765-2 1.ECU通信方式的变化 我们先回顾下两种通信方式&#xff1a;Signal-Based Messaging、Service-Based Messaging。 Signal-Based Messaging 基于信号的通信方式&#xff0c;例如CAN通信&…

软件测试第二篇软件测试技术

第五章单元测试和集成测试的技术 单元静态测试主要由开发人员完成。 标准&#xff1a;规定什么能做&#xff0c;什么不能做。 规范&#xff1a;建议你要怎么做。 5.1.2 代码评审 代码评审是一种发现代码缺陷的另一种测试方法。 代码审查的最佳实践&#xff1a; 创建代码审…

w035基于web的学科竞赛管理

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

导航系统非完整性约束汽车运动公约

Back to FDISYSTEMS Knowledge Base 惯性&导航传感器 导航系统&运动约束 数学基础 & 约定 参考坐标系载体 & 传感器坐标系方向/旋转表示非线性卡尔曼滤波器SPKF汽车运动公约船舶运动公约 惯性传感器安装 惯性传感器运行 技术洞察 Knowledge Base /数学基础…

Centos8 安装 JDK / Python / MySQL / Redis / Nginx

安装 JDK 华为镜像 JDK 下载地址&#xff1a;https://repo.huaweicloud.com:8443/artifactory/java-local/jdk/ 这里安装 JDK8 为例&#xff1a; # 这里直接通过 wget 下载 wget https://repo.huaweicloud.com:8443/artifactory/java-local/jdk/8u202-b08/jdk-8u202-linux-x…

【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目

【Qt-ROS】使用 Qt Creator 构建和编译含 ROS 库的项目 网上大多数办法是在 Qt creator中安装 ros_qtc_plugin 插件&#xff0c;项目以 ROS1 工作空间的形式构建&#xff0c;还是使用 catkin 来构建整个项目。但是这种方式局限很大&#xff0c;导入 Qt 的组件反而变得很麻烦&a…

【RabbitMQ】07-业务幂等处理

1. 方式一 序列化设置唯一Id。 Beanpublic MessageConverter messageConverter() {Jackson2JsonMessageConverter jjmc new Jackson2JsonMessageConverter();jjmc.setCreateMessageIds(true);return jjmc;}RabbitListener(bindings QueueBinding(value Queue(name "d…

SparseDrive 论文学习

论文链接&#xff1a;https://arxiv.org/pdf/2405.19620 代码链接&#xff1a;https://github.com/swc-17/SparseDrive 解决了什么问题&#xff1f; 传统模块化的自动驾驶系统可以被解耦为不同的独立模块&#xff0c;如感知、预测和规划&#xff0c;这种范式会面临信息丢失和…

如何提高自动驾驶中惯性和卫星组合导航pbox的精度?

Mems纯惯导里程推算精度做到千分之一&#xff0c;两分钟航向精度保持0.001弧度&#xff0c;是如何做到的&#xff1f; 简单的来说&#xff0c;导航系统的误差来源于这三方面:1.传感器误差 2.时间和迭代频率 3.算法精度。 接下来逐一分析。 1.传感器误差&#xff0c;传感器误差…

机器学习——贝叶斯

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

20241111,LeetCode 每日一题,用 Go 实现旋转链表

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 解题思路 计算链表长度&#xff1a;遍历链表来获取链表的长度 n&#xff0c;因为链表的旋转其实是循环移动&#xff0c;所以将 k 对 n 取模 k k % n&#xff0c;这样可以…

Linux驱动开发(4):Linux的设备模型

在前面写的驱动中&#xff0c;我们发现编写驱动有个固定的模式只有往里面套代码就可以了&#xff0c;它们之间的大致流程可以总结如下&#xff1a; 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号 register_chrdev_region() 初始化字符设备&#xff0c;cdev_init函数…

在线项目管理系统有哪些选择?2024年9款推荐

本文提及的2024值得关注的9款在线项目管理系统有: 1.PingCode&#xff1b; 2.Worktile&#xff1b; 3.华炎魔方&#xff1b; 4.企业微信&#xff1b; 5.Tapd&#xff1b; 6.青云客&#xff1b; 7.ClickUp&#xff1b; 8.Wrike&#xff1b; 9.Smartsheet。 许多企业在选择在线项…

pytorch量化训练

训练时量化&#xff08;Quantization-aware Training, QAT&#xff09;是一种在模型训练过程中&#xff0c;通过模拟低精度量化效应来增强模型对量化操作的鲁棒性的技术。与后训练量化不同&#xff0c;QAT 允许模型在训练过程中考虑到量化引入的误差&#xff0c;从而在实际部署…

datastage在升级版本到11.7之后,部分在11.3上正常执行的SP报错SQLSTATE = 22007: 本机错误代码 = -180

在升级版本到11.7之后&#xff0c;部分在11.3上正常执行的SP开始报错&#xff0c;报的SQL错误是时间参数问题&#xff0c;但是一样的SP可以直接call sp执行&#xff0c;也可以手动调用作业执行&#xff0c;只有设置定时调度时作业会报错&#xff0c; CALLXXX.XXX(1,CURRENT TIM…

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

Docker使用docker-compose一键部署nacos、Mysql、redis

下面是一个简单的例子&#xff0c;展示如何通过Docker Compose文件部署Nacos、MySQL和Redis。请确保您的机器上已经安装了Docker和Docker Compose。 1&#xff0c;准备好mysql、redis、nacos镜像 sudo docker pull mysql:8 && sudo docker pull redis:7.2 &&…

【模块一】kubernetes容器编排进阶实战之k8s基础概念

kubernetes 基本介绍 kubernetes 组件简介 - master: 主人&#xff0c;并不部署服务&#xff0c;而是管理salve节点。 后期更名为&#xff1a; controll plane&#xff0c;控制面板。 etcd: 2379&#xff08;客户端通信&#xff09;、2…

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量 参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide&#xff0c;在 MPC 控制器中指定缩放因子&#xff0c;可以简化权重调节过程&#xff0c;提高数值计算质量。 当被控对…