Spring Boot 中缓存的用法

news2024/11/17 11:25:48

缓存(Caching)是提升应用性能的重要手段之一,通过减少不必要的数据计算和数据库访问,显著提高系统的响应速度。在 Spring Boot 中,缓存机制被集成得非常好,使得我们能够快速、方便地使用缓存功能。本文将介绍 Spring Boot 中一些缓存的用法,帮助你更好地利用缓存并应用于实际开发中。

基础配置

在 Spring Boot 项目中启用缓存非常简单,只需要在主应用类上添加@EnableCaching注解。

@SpringBootApplication
@EnableCaching // 启用缓存
public class CachingApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(CachingApplication.class, args);
    }
}

使用@Cacheable注解

@Cacheable注解用于标注将结果进行缓存的方法。假设我们有一个方法需要根据 ISBN 号查询图书信息:

@Service
public class BookService {
    
    // 模拟数据库查找图书
    @Cacheable(cacheNames = "books", key = "#isbn")
    public Book findBookByISBN(String isbn) {
        System.out.println("查询数据库获取数据...");
        return new Book(isbn, "Some Book");
    }
}

在这个例子中,findBookByISBN方法被@Cacheable注解标注,意思是当该方法被调用时,先检查缓存中是否存在键为isbn的缓存数据。如果不存在,执行方法体并将返回值放入缓存中。

条件缓存

有时候,我们希望根据条件决定是否缓存结果。例如,只有当 ISBN 号长度大于10时才进行缓存:

@Cacheable(cacheNames = "books", key = "#isbn", condition = "#isbn.length() > 10")
public Book findBookByISBN(String isbn) {
    System.out.println("查询数据库获取数据...");
    return new Book(isbn, "Some Book");
}

上面的代码表示,只有当 ISBN 长度大于10时,才会缓存该方法的返回结果。

更新和移除缓存

当数据发生变化时,缓存中的数据也需要同步更新或移除。我们可以使用@CachePut@CacheEvict注解来实现这一点。

@Service
public class BookService {
    
    @Cacheable(cacheNames = "books", key = "#isbn")
    public Book findBookByISBN(String isbn) {
        System.out.println("查询数据库获取数据...");
        return new Book(isbn, "Some Book");
    }

    // 更新缓存
    @CachePut(cacheNames = "books", key = "#book.isbn")
    public Book updateBook(Book book) {
        System.out.println("更新数据库数据...");
        return book;
    }

    // 移除缓存
    @CacheEvict(cacheNames = "books", key = "#isbn")
    public void removeBookFromCache(String isbn) {
        System.out.println("移除缓存数据...");
        // 实际上不做任何其他操作,我们只是演示缓存移除操作
    }
}

这里,@CachePut注解表示每次调用updateBook方法时,返回结果会被同步到缓存中。而@CacheEvict注解表示每次调用removeBookFromCache方法时,缓存中对应的记录会被移除。

自定义缓存配置

默认情况下,Spring Boot 使用ConcurrentMapCacheManager作为缓存管理器。我们可以自定义缓存配置,来控制缓存的存储方式、过期时间等。

@Configuration
public class CacheConfig {
    
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(
            new ConcurrentMapCache("books")
            // 在这里可以添加更多的缓存配置
        ));
        return cacheManager;
    }
}

通过这样的配置,我们可以集中管理缓存的各种属性,从而使得缓存配置变得更加灵活和可控。

结语

缓存是一把双刃剑,合理使用可以大大提高系统性能,但不当使用则可能导致数据不一致等问题。开发者应根据具体需求和场景,灵活使用缓存策略。

个人观点,仅供参考。


在这里插入图片描述

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

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

相关文章

基于Android studio 订餐、外卖系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 具有登录,注册,修改密码,查看关于开发信息(可以填写自己的信息) 我的:可以查看菜品详情,填写份数,加入购物车, 购物车:可…

【IDEA软件应用篇】IDEA基础开发设置和开发快捷键

IDEA是一种集成开发环境,可以运行java代码。 本篇文章你将收获到下面的知识: (1)IDEA如何设置字体大小快捷键 (2)如何解决每次进IDEA时,进去的页面都是上次使用完时的那个页面 (3&am…

使用yum下载rpm包

1、命令格式 yum install --downloadonly --downloaddir<directory> <package-name> --downloadonly&#xff1a;只下载选项而不进行安培训--downloaddir&#xff1a;指定下载目录&#xff0c;默认下载的RPM包会保在/var/cache/yum/x86_64/[centos|fedora-versio…

Linux系统下Mysql忘记密码怎么解决

一、对Mysql配置文件进行设置 1、找到/etc/mysql/my.cnf路径下&#xff0c;用Vi命令编辑my.cnf配置文件&#xff0c;命令如下&#xff1a; # 以管理员身份登录 sudo su # 输入管理员密码 # 登录成功后&#xff0c;找到Mysql的配置文件-->Mysql配置文件默认在此 cd /etc/my…

异相(相位不平衡)状态下的合成器效率分析-理论与ADS仿真

异相&#xff08;相位不平衡&#xff09;状态下的合成器效率分析-理论与ADS仿真 12、ADS使用记录之功分器设计中简单介绍了威尔金森功分器的设计方法。一般来讲&#xff0c;功分器反过来就能作为合路器使用&#xff0c;在输入信号相位一致的情况下&#xff0c;各种合路器的效率…

YOLOv8独家改进:mamba系列 | 视觉态空间(VSS)块结合C2f二次创新,提升捕捉广泛的上下文信息 | VMamba2024年最新成果

💡💡💡创新点:Mamba UNet采用了纯基于视觉Mamba(VMamba)的编码器-解码器结构,融入了跳跃连接,以保存网络不同规模的空间信息。这种设计有助于全面的特征学习过程,捕捉医学图像中复杂的细节和更广泛的语义上下文。我们在VMamba块中引入了一种新的集成机制,以确保编…

Linux之共享内存mmap用法实例(六十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

通过注意力调节实现更好的文本到图像生成对齐

近年来&#xff0c;生成性AI技术在众多领域取得了前所未有的进步。大规模预训练模型的出现激发了各种下游任务中的新应用。这在文本到图像生成领域尤为明显&#xff0c;例如Stable Diffusion、DALL-E 2和Imagen等模型已经显著展示了它们的能力。尽管如此&#xff0c;复杂提示中…

Go语言的pprof工具是如何使用的?

文章目录 Go语言的pprof工具详解pprof的使用runtime/pprofnet/http/pprof 快速开始获取采样数据通过pprof工具进行性能分析总结 Go语言的pprof工具详解 Go语言作为一个高性能、高并发的编程语言&#xff0c;对性能优化有着极高的要求。在Go语言的标准库中&#xff0c;pprof是一…

架构篇44:互联网架构模板:“平台”技术

文章目录 运维平台测试平台数据平台管理平台小结当业务规模比较小、系统复杂度不高时,运维、测试、数据分析、管理等支撑功能主要由各系统或者团队独立完成。随着业务规模越来越大,系统复杂度越来越高,子系统数量越来越多,如果继续采取各自为政的方式来实现这些支撑功能,会…

回溯大法总结

前言 本篇博客将分两步来进行&#xff0c;首先谈谈我对回溯法的理解&#xff0c;然后通过若干道题来进行讲解&#xff0c;最后总结 对回溯法的理解 回溯法可以看做蛮力法的升级版&#xff0c;它在解决问题时的每一步都尝试所有可能的选项&#xff0c;最终找出所以可行的方案…

对安卓手机上损坏的 SD 卡进行故障排除:恢复提示和修复

概括 如果您总是在旅途中&#xff0c;那么您很可能每天都在使用 SD 卡。这些微小但功能强大的闪存已经变得和手机的内部存储一样有用。它们可以存储数据并移动您想要的任何数据类型&#xff0c;因为它们在 Android 设备上添加了额外的存储空间。不幸的是&#xff0c;他们可能会…

产品推荐 | 基于Xilinx XCKU115的半高PCIe x8 硬件加速卡

一、板卡概述 本板卡系我公司自主研发&#xff0c;采用Xilinx公司的XCKU115-3-FLVF1924-E芯片作为主处理器&#xff0c;主要用于FPGA硬件加速。板卡设计满足工业级要求。如下图所示&#xff1a; 二、功能和技术指标 板卡功能 参数内容 主处理器 XCKU115-3-FLVF1924-E 板卡…

Java网络编程之TCP协议核心机制(三)

题外话 最近学习内容很多嗷 正题 延时应答机制 当客户端发送数据到服务器时,服务器不会立即返回ACK,而是等待一会再返回ACK 这段等待时间应用程序可能会消化掉接收缓冲区中的数据,当服务器返回ACK时,就会携带此时接收缓冲区大小的信息 当客户端下次再发送数据的时候就可以…

JMeter学习笔记一

一、JMeter 背景&#xff1a;移动互联网 -- 小程序 移动APPH5 前后端分离&#xff08;java&#xff0c;C&#xff0c;C#&#xff09; H5 JS Vue 接口测试 (Postman,jmeter,Apifox,ApiPost) 我怎么发送请求&#xff1f; Http接口是一个特殊的URL地址&#xff0c;当有人访问这个地…

Java订餐系统源码 springboot点菜系统源码

Java订餐系统源码 springboot点菜系统源码 源码下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89341358 功能介绍&#xff1a; 前台登录&#xff1a;前台登录&#xff1a; ①首页&#xff1a;菜品信息推荐、菜品信息展示、查看更多 ②菜品信息&…

SQL刷题笔记day3——第二大值

1题目 我的错误代码&#xff1a; select emp_no,salary from salaries where salary (select salary from salaries group by salary order by salary limit 1,1 ) order by emp_no asc 正确代码&#xff1a; select emp_no,salary from salaries where salary (select sal…

Vita-CLIP: Video and text adaptive CLIP via Multimodal Prompting

标题&#xff1a;Vita-CLIP: 通过多模态提示进行视频和文本自适应CLIP 源文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Wasim_Vita-CLIP_Video_and_Text_Adaptive_CLIP_via_Multimodal_Prompting_CVPR_2023_paper.pdfhttps://openaccess.thecvf.…

代码随想录算法训练营第五十天||309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

文章目录 一、309.最佳买卖股票时机含冷冻期 思路 二、714.买卖股票的最佳时机含手续费 思路 一、309.最佳买卖股票时机含冷冻期 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;…

如何高效创建与配置工程环境:零基础入门

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、工程环境的搭建与准备 二、配置虚拟环境与选择解释器 三、编写代码与自动添加多行注释 …