探索 Spring Boot 集成缓存功能的最佳实践
在线工具站
- 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。
程序员资料站
- 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程、各大面试专题,还有常用开发工具的教程。
小报童专栏精选Top100
- 推荐一个小报童专栏导航站:小报童精选Top100(http://xbt100.top),收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~
在现代 Web 应用开发中,性能优化是一个永恒的话题。而缓存作为提升系统性能和减轻数据库压力的有效手段,得到了广泛应用。Spring Boot 作为一个流行的 Java 框架,提供了简便的缓存集成方式。
一、为什么使用缓存
在讨论技术实现之前,我们先来了解一下缓存的好处:
- 减少数据库访问:通过缓存,可以将频繁访问的数据保存在内存中,减少数据库查询次数,从而降低数据库负载。
- 提高响应速度:内存访问速度远快于数据库查询,使用缓存可以显著提升应用响应速度。
- 提升系统性能和扩展性:缓存可以分担部分数据访问压力,提高系统整体性能,并支持大规模用户访问。
二、Spring Boot 集成缓存的准备工作
在 Spring Boot 中,集成缓存非常方便,只需添加相关依赖和配置即可。
1. 添加依赖
首先,在你的 pom.xml
文件中添加缓存相关的依赖。Spring Boot 支持多种缓存实现,如 EhCache、Caffeine、Redis 等。以下是添加 Caffeine 缓存依赖的示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId>
</dependency>
如果你使用的是 Gradle,可以在 build.gradle
文件中添加以下依赖:
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.github.ben-manes.caffeine:caffeine'
2. 启用缓存
在 Spring Boot 应用的主类上添加 @EnableCaching
注解,以启用缓存功能:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching
public class CacheApplication {public static void main(String[] args) {SpringApplication.run(CacheApplication.class, args);}
}
三、缓存配置
在 application.properties
或 application.yml
文件中进行缓存配置。以下是使用 Caffeine 缓存的配置示例:
application.properties
spring.cache.caffeine.spec=maximumSize=1000,expireAfterWrite=10m
application.yml
spring:cache:caffeine:spec: maximumSize=1000,expireAfterWrite=10m
这里配置了缓存的最大条目数为 1000,并且缓存条目在写入 10 分钟后过期。
四、使用缓存
Spring Boot 提供了一组注解来简化缓存操作:
@Cacheable
:将方法的返回值缓存起来,以后调用时如果缓存中有值则直接返回缓存值。@CachePut
:将方法的返回值更新到缓存中。@CacheEvict
:从缓存中移除一个或多个条目。@Caching
:组合多个缓存操作。
1. 使用 @Cacheable
在需要缓存的方法上添加 @Cacheable
注解:
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class UserService {@Cacheable("users")public User getUserById(Long id) {// 模拟数据库查询simulateSlowService();return new User(id, "John Doe");}private void simulateSlowService() {try {Thread.sleep(3000L); // 模拟延时} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}
在上面的示例中,第一次调用 getUserById
方法时会模拟数据库查询(延时 3 秒),结果会被缓存起来,后续相同参数的调用会直接返回缓存值。
2. 使用 @CachePut
当需要更新缓存时,可以使用 @CachePut
注解:
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;@Service
public class UserService {@CachePut(value = "users", key = "#user.id")public User updateUser(User user) {// 更新数据库return user;}
}
3. 使用 @CacheEvict
当需要移除缓存中的条目时,可以使用 @CacheEvict
注解:
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;@Service
public class UserService {@CacheEvict(value = "users", key = "#id")public void deleteUser(Long id) {// 从数据库删除用户}
}
4. 使用 @Caching
如果需要组合多个缓存操作,可以使用 @Caching
注解:
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;@Service
public class UserService {@Caching(put = { @CachePut(value = "users", key = "#user.id") },evict = { @CacheEvict(value = "users", key = "#user.id") })public User saveOrUpdate(User user) {// 保存或更新用户return user;}
}
五、缓存的监控和统计
对于生产环境中的缓存应用,监控和统计缓存的使用情况是至关重要的。Caffeine 提供了内置的统计功能,可以通过配置启用。
启用缓存统计
在 application.properties
或 application.yml
文件中添加配置:
spring.cache.caffeine.spec=maximumSize=1000,expireAfterWrite=10m,recordStats
spring:cache:caffeine:spec: maximumSize=1000,expireAfterWrite=10m,recordStats
访问缓存统计
通过注入 CacheManager
获取缓存统计信息:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.stereotype.Service;@Service
public class CacheStatisticsService {@Autowiredprivate CaffeineCacheManager cacheManager;public void printCacheStats() {CaffeineCache caffeineCache = (CaffeineCache) cacheManager.getCache("users");Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();System.out.println("Cache Stats: " + nativeCache.stats());}
}
六、总结
通过本文的介绍,我们学习了如何在 Spring Boot 项目中集成缓存功能。缓存作为提升系统性能的重要手段,在实际应用中有着广泛的应用场景。Spring Boot 提供了简洁的缓存集成方式,使得我们能够方便地使用缓存来优化系统性能。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
探索 Spring Boot 集成缓存功能的最佳实践
在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…...
![](https://img-blog.csdnimg.cn/direct/a46dde27c4da44c3a97216a9b50a315d.png)
微信小程序使用方法
一.在网页注册小程序账号(在未注册的情况下) 1.如果你还没有微信公众平台的账号,请先进入微信公众平台首页,点击 “立即注册” 按钮进行注册。我们选择 “小程序” 即可。 接着填写账号信息,需要注意的是,…...
![](https://img-blog.csdnimg.cn/img_convert/64d1168ce13cbae9c4a7d0a2eb67d0ee.png)
前后端分离的后台管理系统源码,快速开发OA、CMS网站后台管理、毕业设计项目
那有没有一款软件解-决这种现状呢?答案是肯定的。引入我们的软件——eladmin。 介绍 ELADMIN,一个简单且易上手的 Spring boot 后台管理框架,已发布 Mybatis-Plus 版本,为开发者提供了一个全-面、高-效的解-决方案。 特点 高-效率:前后端完全分离,项目简单可配,内置代码…...
![](https://img-blog.csdnimg.cn/direct/9634d13b7f4340c5ba0e2579162b97e4.png)
[深度学习]--分类问题的排查错误的流程
原因复现: 原生的.pt 好使, 转化后的 CoreML不好使, 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…...
![](https://img-blog.csdnimg.cn/direct/758aeb37bc7a4d368e581b627587abe7.png)
微信小程序简易录音机
首先先创建一个项目(想必大家都会啦那就直接开干) 首先上html结构 <view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view>&l…...
![](https://img-blog.csdnimg.cn/direct/5b11be156f4e49fda84e9fe4ec19f05d.png)
Ollama深度探索:AI大模型本地部署的全面教程
目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…...
![](https://img-blog.csdnimg.cn/direct/14b497e765fb4b88ab663cb0e09dc3da.png)
文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题
四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界,假定使用链表表示和加权合并启发式策略。如果要写代码,请用go语言。 文心一言: 图 21-3 没有直接给出,但通常这种操作序列可能与某种数据结构(如并查集或…...
![](https://img-blog.csdnimg.cn/direct/da2ece83a9064e8e82b9e3adb64faf42.png)
基于springboot实现影院订票系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现影院订票系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生,其可以帮助管理者在…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux 常用命令合集
进入root模式 su -> 回车 -> 输入root用户密码关闭系统 方法1: shutdown -h now 方法2: init 0 方法3: telinit 0按预定时间关闭系统 shutdown -h hours:minutes &取消按预定时间关闭系统 shutdown -c重启 shutdown -r now重启…...
![](https://img-blog.csdnimg.cn/direct/dbe4a4f5b64e4a8ca4ddcf8a9cf75281.png)
Vue3插件安装
一、volar插件安装 volar:Vue文件的语法提示和高亮提醒。volar已经更名为Vue - Official,其安装步骤如下。 (1)打开vscode,点击扩展面板,在搜索窗口中输入volar,选择Vue - Official进行安装。 (2࿰…...
![](https://img-blog.csdnimg.cn/direct/666decfa260949a39814f3da75509aee.png)
Redis精要
一、什么是缓存击穿、缓存穿透、缓存雪崩? 缓存穿透 【针对大量非法访问的请求,缓存中没有,直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据,这样每次请求直接打到数据库,就好像缓存不存在 一样。 对于系…...
![](https://img-blog.csdnimg.cn/direct/2613f58269ec4b9b8f664afa4a2357df.jpeg#pic_center)
国产24位I2S输入+192kHz立体声DAC音频数模转换器CJC4344
CJC4344是一款立体声数模转换芯片,内含插值滤波器、multi bit数模转换器、输出模拟滤波器。CJC4344系列支持大部分的音频数据格式。CJC4344基于一个带线性模拟低通滤波器的四阶multi-bitΔ-Σ调制器,而且本芯片可以通过检测信号频率和主时钟频率…...
![](https://img-blog.csdnimg.cn/direct/0dda69ff48124a6db8c1188e63afd428.png)
UniApp 开发微信小程序教程(一):准备工作和环境搭建,项目结构和配置
文章目录 一、准备工作和环境搭建1. 安装 HBuilderX步骤: 2. 注册微信开发者账号步骤: 3. 创建 UniApp 项目步骤: 二、项目结构和配置1. UniApp 项目结构2. 配置微信小程序修改 manifest.json修改 pages.json 3. 添加首页文件index.vue 示例&…...
![](https://img-blog.csdnimg.cn/direct/466ffe7b1bcf4f74a032871c30ad58b8.png)
[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]
场景 在开发Windows和macOS的界面软件时,Windows用的是WTL/Win32技术,而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多,这就会给同步Windows和macOS的功能造成很大负担…...
![](https://img-blog.csdnimg.cn/direct/b663208fcd784468a6d00008f745d914.png)
《Windows API每日一练》5.2 按键消息
上一节中我们得知,Windows系统的按键消息有很多类型,大部分按键消息都是由Windows系统的默认窗口过程处理的,我们自己只需要处理少数几个按键消息。这一节我们将详细讲述Windows系统的所有按键消息及其处理方式。 本节必须掌握的知识点&…...
![](https://www.ngui.cc/images/no-images.jpg)
adb 截屏和录屏命令
adb 录屏命令 screenrecord 简介 screenrecord 是一个 shell 命令 支持 Android 4.4(API level 19)以上 支持视频格式: mp4 一些限制 某些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题,请试着指定较低的分辨率 不支持录制过程中屏幕旋转,如果录制…...
![](https://img-blog.csdnimg.cn/direct/35101245875b418f83a17d8444fd1c16.jpeg#pic_center)
springboot相关的一些知识
SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat,所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个: server.tomcat.thread.min-spare:最少的工作线程数,默认大小…...
![](https://img-blog.csdnimg.cn/direct/9b3eca4bab064aff8882827c2f707187.jpeg)
DP:完全背包+多重背包问题
完全背包和01背包的区别就是:可以多次选 一、完全背包(模版) 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…...
![](https://www.ngui.cc/images/no-images.jpg)
购物返利系统的安全性:防范欺诈与数据保护
购物返利系统的安全性:防范欺诈与数据保护 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 购物返利系统作为一种电子商务模式,通过向消…...
![](https://img-blog.csdnimg.cn/direct/c4779d71dc3440a8a1488800e169c3e1.png)
从WebM到MP3:利用Python和wxPython提取音乐的魔法
前言 有没有遇到过这样的问题:你有一个包含多首歌曲的WebM视频文件,但你只想提取其中的每一首歌曲,并将它们保存为单独的MP3文件?这听起来可能有些复杂,但借助Python和几个强大的库,这个任务变得异常简单。…...
![](https://img-blog.csdnimg.cn/20210708175208941.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzgzNzE4OA==,size_16,color_FFFFFF,t_70)
图片转pdf,图片转pdf在线转换,在线图片转pdf
图片转PDF,听起来似乎是一个简单的操作,但实际上,它涉及到许多细节和技巧。有时候我们需要将图片转换为PDF格式,以便于分享、打印或保存。那么,如何将图片转换成PDF呢?接下来,我将为您详细介绍几…...
![](https://www.ngui.cc/images/no-images.jpg)
SpringBoot3使用Swagger3
SpringBoot3使用Swagger3 项目中的后端接口进行简单的前端展示一、依赖引入二、快速启动1.在application.yml中配置2.或者properties文件,则配置3.启动项目访问swagger 三、使用注解标注接口Swagger配置文件Swagger 注解迁移举例五种常用ApiApiOperationApiImplicitParamApiMod…...
![](https://img-blog.csdnimg.cn/direct/1cf0031e60f54afd886e3a15874e46e7.png)
【51单片机基础教程】点亮led
文章目录 前言51单片机点亮LED的原理硬件部分软件部分51单片机的寄存器编程步骤proteus仿真点亮一个led 点亮多个ledproteus仿真代码 流水灯 总结 前言 单片机(Microcontroller Unit, MCU)是一种集成电路,广泛应用于各种电子产品中。作为嵌入…...
![](https://img-blog.csdnimg.cn/direct/1e1f62a1f0fe42f6a56dfb023b2809ef.jpeg)
Docker之overlay2的迁移
原因 docker默认将文件及其容器放置在了系统盘的挂载区内,如果长期使用会发现系统挂载区被overlay2挤爆了,因此在一开始我们将其迁移在大容量外挂磁盘上,就可以避免系统盘被挤爆,放心使用. 具体操作 # 停止容器 systemctl stop docker# 修改容器配置,…...
![](https://www.ngui.cc/images/no-images.jpg)
CentOS中的rename命令
目录 CentOS中的rename命令基本语法使用示例注意事项安装prename CentOS中的rename命令 在CentOS系统中,rename命令通常是指util-linux包中提供的版本,它用于批量重命名文件,但与Perl版本的rename命令相比,功能较为简单ÿ…...
![](https://img-blog.csdnimg.cn/direct/1940ca7a0f684c9a9d0f39e95bd23c73.png)
redis.conf 参数详解,方便进行性能优化配置
以下是redis.conf中一些常见参数的详细说明: daemonize:是否以后台进程运行,默认为no; pidfile:如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid;bind:绑定主…...
![](https://img-blog.csdnimg.cn/direct/21bee724f35d44c981996cc46f251e0c.png)
微信小程序登录流程详情及Java代码
一、流程图 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号,调用wx.getPhoneNumber() ,获取加密…...
![](https://img-blog.csdnimg.cn/direct/71ba6efe7e9c49eca330400329571b42.png)
c++qt合并两张灰度图像
需求:将两张尺寸相同的灰度图像进行合并,合并后的图像,每个像素点灰度值为两张原图对应像素点灰度值之和。若超过255,则最大为255。 方法一: 将图像读取为cv::Mat,再调用opencv的cv::add方法,进…...
![](https://img-blog.csdnimg.cn/direct/f99180db2c214e888279042f085e087f.jpeg)
Uniapp通过年月日时间转变星期格式
效果图 参靠微信小程序:日常记一记 代码 <view v-for"(d,index) in dataList" >{{getWeekDay(d.ctime)}} //时间格式:2024-06-21</view> js export default {data(){return {dataList:[],//时间数组}},onLoad() {this.loadList…...
![](https://www.ngui.cc/images/no-images.jpg)
如何编写和执行高效的测试计划
如何编写和执行高效的测试计划 1. 测试计划概述2. 测试阶段详解3. 测试计划模板4. 关键注意事项总结 1. 测试计划概述 测试计划是指导整个测试过程的重要文档,其中包含了测试策略、资源分配、进度安排以及风险评估等内容。 一个完善的测试计划应当包括以下几个主要…...
![](https://img-blog.csdnimg.cn/2019021916315194.png)
机票最便宜网站建设/站长素材免费下载
目录 1.原理背景 拉普拉斯修正 半朴素贝叶斯 贝叶斯网 scikit-learn实现(GaussianNB,MultinomialNB和BernoulliNB) https://www.cnblogs.com/pinard/p/6074222.html 1.原理背景 贝叶斯公式: 假如我们的分类模型样本是m个样本…...
![](/images/no-images.jpg)
江门网站推广软件/百度地图推广怎么做的
Web中的Session和Cookie回顾 1. Session机制 由于HTTP协议是无状态的协议,一次浏览器和服务器的交互过程就是: 浏览器:你好吗? 服务器:很好! 这就是一次会话,对话完成后,这次会…...
![](/images/no-images.jpg)
wordpress添加3d地图/网站排名seo
作为一名前端工程师,一个好的编辑器可以在编码期间,事半功倍。这里我分享一下vs code和atom这两种现今非常流行的编辑器,各有各的优缺点,看大家的喜好。我比较倾向于vs code,顺便也把插件整理了一下,给大家…...
![](https://images0.cnblogs.com/blog/287866/201505/141717489707927.png)
平面设计教程网站/seo关键词优化系统
大概讲解: 在百度地图上显示一个marker,当marker被点击后,显示自定义的View.当自定义的View被点击后,响应不同Button的点击事件。被百度这个infowindo里面的view坑惨了,一直以为不能点击呢??原来里面的view…...
卫浴毛巾架网站建设/seo快速优化软件网站
转载请标明出处:http://blog.csdn.net/u010046908/article/details/50805177 本文出自:【李东的博客】 最近一直非常的关注react-native的开发,每天都会看到江清清技术专栏中关于react-native的 使用,基本上从搭建开发环境到版本的升级与降级等技术有了…...
![](http://upload-images.jianshu.io/upload_images/1977282-9724d7599f0a4653.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/649/format/webp)
设计品质网站建设/招商外包
原文:开源中国博客时至2018年的今天,C 在互联网服务端开发方向依然占据着相当大的份额;百度,腾讯,甚至以java为主流开发语言的阿里都在大规模使用C做互联网服务端开发,而这恰恰是本文想要讨论的范畴。第1…...