Spring Boot 中使用Caffeine缓存的简单例子
Caffeine 缓存是 Java 的高性能缓存库。本文简单记录下 Caffeine 缓存的用法。
依赖配置
<dependencies>
<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>
</dependencies>
代码配置
我们需要初始化 Caffeine 对象以及 Caffeine 缓存管理器。
@Configuration
public class CaffeineConfig {
@Bean
public Caffeine<Object, Object> caffeine() {
return Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES);
}
@Bean
public CacheManager cacheManager(Caffeine<Object, Object> caffeine) {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
caffeineCacheManager.setCaffeine(caffeine);
return caffeineCacheManager;
}
}
使用缓存
首先,我们创建一个 Service.
@Service
@Slf4j
public class AddressService {
private static final Map<Long, AddressDTO> ADDRESS_TABLE = new HashMap<>();
static {
ADDRESS_TABLE.put(1L, new AddressDTO(1, "广东"));
ADDRESS_TABLE.put(2L, new AddressDTO(2, "深圳"));
ADDRESS_TABLE.put(3L, new AddressDTO(3, "坂田"));
}
@Cacheable(value = "address_cache", key = "#addressId")
public AddressDTO getAddress(long addressId) {
log.info("AddressService getAddress, addressId: {}", addressId);
return ADDRESS_TABLE.get(addressId);
}
}
其次,我们创建一个 Controller.
@RestController
public class CaffeineController {
@Autowired
private AddressService addressService;
@Autowired
private CacheManager cacheManager;
@GetMapping("/{addressId}")
public AddressDTO getAddress(@PathVariable long addressId) {
return addressService.getAddress(addressId);
}
@GetMapping("/cache/{addressId}")
public AddressDTO findAddressFromCache(@PathVariable long addressId) {
Cache addressCache = cacheManager.getCache("address_cache");
if (addressCache != null) {
return (AddressDTO)addressCache.get(addressId).get();
}
return null;
}
}
然后就可以测试了。我们根据打印的日志来判断缓存是否生效了。
总结
当我们想从缓存中查询某条数据时,可以注入CacheManager,通过缓存名称来获取对应缓存,再根据key获取value。就像findAddressFromCache里那样。
这只是个简单例子,实际使用的时候还要多关注他的配置参数,最基本的就是缓存的过期时间,这样才能更好的使用它。
Spring Boot 中使用Caffeine缓存的简单例子的更多相关文章
- 在Spring Boot中使用数据缓存
春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...
- Spring Boot中使用@Scheduled创建定时任务
我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时 ...
- spring boot 中 Cache 的使用
参考:https://blog.csdn.net/qq_38974634/article/details/80650810 一.JSR107 Java Caching 定义5个核心的接口,分别是Cac ...
- Spring Boot(三):Spring Boot中的事件的使用 与Spring Boot启动流程(Event 事件 和 Listeners监听器)
前言:在讲述内容之前 希望大家对设计模式有所了解 即使你学会了本片的内容 也不知道什么时候去使用 或者为什么要这样去用 观察者模式: 观察者模式是一种对象行为模式.它定义对象间的一种一对多的依赖关系, ...
- Spring Boot中使用EhCache实现缓存支持
SpringBoot提供数据缓存功能的支持,提供了一系列的自动化配置,使我们可以非常方便的使用缓存.,相信非常多人已经用过cache了.因为数据库的IO瓶颈.一般情况下我们都会引入非常多的缓存策略, ...
- Spring Boot中使用缓存
Spring Boot中使用缓存 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一. 原始的使 ...
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
Spring Boot中的缓存支持(一)注解配置与EhCache使用 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决 ...
- Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
在上一篇Spring中使用JdbcTemplate访问数据库中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务端 ...
- 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】
swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...
- Spring Boot 中集成 Redis 作为数据缓存
只添加注解:@Cacheable,不配置key时,redis 中默认存的 key 是:users::SimpleKey [](1.redis-cli 中,通过命令:keys * 查看:2.key:缓存 ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (167)-- 算法导论13.1 7题
七.用go语言,试描述一棵含有 n 个关键字的红黑树,使其红色内部结点个数与黑色内部结点个数的比值最大.这个比值是多少? 该比值最小的树又是怎样呢?比值是多少? 文心一言: 红黑树是一种自平衡的二叉查 ...
- Volcano 原理、源码分析(二)
0. 总结前置 1. 概述 2. 寻找调度器中的 PodGroup 2.1 从 PodGroup 到 JobInfo 的封装 2.2 从 Pod 到 TaskInfo 的封装 3. 控制器中 PodG ...
- 神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在实施backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施.因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的.为了逐渐实现梯 ...
- Python——第四章:闭包(Closure)、装饰器(Decorators)
闭包: 本质, 内层函数对外层函数的局部变量的使用. 此时内层函数被称为闭包函数 1. 可以让一个变量常驻与内存,可随时被外层函数调用. 2. 可以避免全局变量被修改.被污染.更安全.(通 ...
- Windows Server 2008 R2 & Windows Server 2012 R2 无法通过update更新的解决方法
windows Server 2008 r2 无法通过update更新的解决方法 注意:目前windows Server系列操作系统已经完全停止支持. 1.安装 SP1补丁 KB976932 点击:微 ...
- hiveSQL常见专题
SQL强化 SQL执行顺序 --举例: select a.sex, b.city, count(1) as cnt, sum(salary) as sum1 from table1 a join ta ...
- Nginx unexpected end of file 配置证书遇到问题,如何解决?
原文链接 https://bysocket.com/nginx-unexpected-end-of-file-expecting-in-key-file/ 一.Nginx unexpected end ...
- NDPQ(NDP+PQ),定义分布式数据库新方向
摘要:云服务提供商构建新的云原生关系数据库系统,专门为云基础架构设计,通常采用将计算和存储分离到独立扩展的分布式层的设计. 本文分享自华为云社区<性能提升100倍!GaussDB(for MyS ...
- 云图说|ModelArts Pro:让AI开发更简单
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: ModelArt ...
- 火山引擎 DataLeap:在数据研发中,如何提升效率?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在数仓及中台研发过程中,研发人员经常需要在不同任务中维护相同或类似代码,不仅费时费力,并且代码迭代后也面临不同业务 ...