springboot集成spring cache缓存示例代码
发布时间 - 2026-01-11 00:56:23 点击率:次本文介绍如何在springboot中使用默认的spring cache,

声明式缓存
Spring 定义 CacheManager 和 Cache 接口用来统一不同的缓存技术。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的时候,我们需要注册实现的 CacheManager 的 Bean。
Spring Boot 为我们自动配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。
默认使用 ConcurrenMapCacheManager
在我们不使用其他第三方缓存依赖的时候,springboot自动采用ConcurrenMapCacheManager作为缓存管理器。
环境依赖
在pom文件引入spring-boot-starter-cache环境依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
创建一个book数据访问层
先创建一个实体类
public class Book {
private String isbn;
private String title;
public Book(String isbn, String title) {
this.isbn = isbn;
this.title = title;
}
….getter
….setter
}
创建一个数据访问接口
public interface BookRepository {
Book getByIsbn(String isbn);
}
这个你可以写一个很复杂的数据查询操作,比如操作MySQL、nosql等等。为了演示这个栗子,我只做了一下线程的延迟操作,当作是查询数据库的时间。
实现接口类:
@Component
public class SimpleBookRepository implements BookRepository {
@Override
public Book getByIsbn(String isbn) {
simulateSlowService();
return new Book(isbn, "Some book");
}
// Don't do this at home
private void simulateSlowService() {
try {
long time = 3000L;
Thread.sleep(time);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
}
}
测试类
@Component
public class AppRunner implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);
private final BookRepository bookRepository;
public AppRunner(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
@Override
public void run(String... args) throws Exception {
logger.info(".... Fetching books");
logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
}
}
启动程序,你会发现程序在控制台依次打印了:
2014-06-05 12:15:35.783 … : …. Fetching books
2014-06-05 12:15:40.783 … : isbn-1234 –> >Book{isbn='isbn-1234', title='Some book'}
2014-06-05 12:15:43.784 … : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
2014-06-05 12:15:46.786 … : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
你会发现程序依次3s打印一行日志。这时还没开启缓存技术。
开启缓存技术
在程序的入口中加入@ EnableCaching开启缓存技术:
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在需要缓存的地方加入@Cacheable注解,比如在getByIsbn()方法上加入@Cacheable(“books”),这个方法就开启了缓存策略,当缓存有这个数据的时候,会直接返回数据,不会等待去查询数据库。
@Component
public class SimpleBookRepository implements BookRepository {
@Override
@Cacheable("books")
public Book getByIsbn(String isbn) {
simulateSlowService();
return new Book(isbn, "Some book");
}
// Don't do this at home
private void simulateSlowService() {
try {
long time = 3000L;
Thread.sleep(time);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
}
}
这时再启动程序,你会发现程序打印:
isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
2017-04-23 18:17:09.479 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn='isbn-4567', title='Some book'}
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn='isbn-4567', title='Some book'}
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
只有打印前面2个数据,程序等了3s,之后的数据瞬间打印在控制台上了,这说明缓存起了作用。
源码下载:https://github.com/forezp/SpringBootLearning
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# boot
# cache
# springboot
# 使用cache
# 缓存
# SpringBoot集成本地缓存性能之王Caffeine示例详解
# springboot集成本地缓存Caffeine的三种使用方式(小结)
# SpringBoot集成cache缓存的实现
# SpringBoot集成Caffeine缓存的实现步骤
# 浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)
# 详解SpringBoot集成Redis来实现缓存技术方案
# SpringBoot集成缓存功能详解
# 你会发现
# 创建一个
# 还没
# 你可以
# 上了
# 管理器
# 等了
# 第三方
# 如在
# 只做
# 大家多多
# 很复杂
# 源码下载
# 口中
# 数据查询
# 瞬间
# 如何在
# 开启了
# 实体类
# github
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Gate和Policy进行授权?(权限控制)
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何确保FTP站点访问权限与数据传输安全?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Android滚轮选择时间控件使用详解
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何实现建站之星域名转发设置?
详解CentOS6.5 安装 MySQL5.1.71的方法
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Python图片处理进阶教程_Pillow滤镜与图像增强
企业网站制作这些问题要关注
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何快速辨别茅台真假?关键步骤解析
怎么用AI帮你为初创公司进行市场定位分析?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何快速完成中国万网建站详细流程?
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
潮流网站制作头像软件下载,适合母子的网名有哪些?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Firefox Developer Edition开发者版本入口
如何在建站之星网店版论坛获取技术支持?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
网易LOFTER官网链接 老福特网页版登录地址
Laravel如何实现事件和监听器?(Event & Listener实战)
如何挑选高效建站主机与优质域名?
JavaScript如何实现错误处理_try...catch如何捕获异常?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何在万网利用已有域名快速建站?
如何基于云服务器快速搭建个人网站?
javascript基于原型链的继承及call和apply函数用法分析
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何快速建站并高效导出源代码?
利用vue写todolist单页应用
Laravel观察者模式如何使用_Laravel Model Observer配置
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何获取免费开源的自助建站系统源码?
如何在Windows环境下新建FTP站点并设置权限?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结

