利用Springboot+Caffeine实现本地缓存实例代码
作者:Zeuss 发布时间:2022-05-31 09:13:33
简介
之前在项目中遇到了一个新需求,领导让我使用本地缓存,来缓存数据库查出的用户信息,经过一番资料查阅和实验,最终确定了使用Caffeine来作为实现方案,接下来我将简单介绍一下实现的过程和思路:
Caffeine 介绍
官网地址:github.com/ben-manes/c…
大家只需要知道:Caffeine 是一个高性能的本地缓存库就可以了,接下来我们将在项目实践中使用caffeine缓存。
思路
如果要使用 Springboot + Caffeine 实现本地缓存,我们需要完成以下步骤:
要在 Springboot 中使用 Caffeine,首先需要在 pom.xml 文件中添加 Caffeine 的依赖
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.5</version>
</dependency>
然后,可以使用 @EnableCaching 注解启用缓存,并使用 @Cacheable 注解标记要缓存的方法:
@EnableCaching
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在需要缓存的方法上添加 @Cacheable 注解。
@Cacheable(value = "users", key = "#userId")
public User getUserById(Long userId) {
// 查询用户
}
在方法的实现中,使用 Caffeine 缓存 API 访问和操作缓存。
例如,假设我们有一个类叫做 UserService,其中有一个方法叫做 findById,用于根据用户 ID 查找用户信息。
下面是如何使用 Springboot + Caffeine 实现该方法的缓存:
@Service
public class UserService {
// 定义缓存名称
private static final String CACHE_NAME = "users";
// 声明 Caffeine 缓存
private final Cache<Long, User> cache;
// 注入缓存提供者
@Autowired
public UserService(CacheManager cacheManager) {
this.cache = cacheManager.getCache(CACHE_NAME);
}
// 根据用户 ID 查找用户信息
@Cacheable(CACHE_NAME)
public User findById(Long id) {
// 从缓存中查找用户
User user = cache.getIfPresent(id);
if (user == null) {
// 缓存中没有用户,则从数据库中查找
user = findByIdFromDb(id);
if (user != null) {
//如果从数据库中找到了用户,则将用户信息放入缓存
cache.put(id, user);
}
}
return user;
}
在上面的代码中,我们使用了 Springboot 的 @Cacheable 注解来标记 findById 方法,表示该方法的返回值需要被缓存。
在方法中,我们使用 Caffeine 缓存 API 来操作缓存,例如获取缓存中的数据、更新缓存数据等。
通过使用 Springboot + Caffeine 实现本地缓存,我们可以提高系统的性能和响应速度,避免重复的计算和数据库访问。
此外,Springboot 提供了丰富的缓存配置选项,我们可以根据实际情况调整缓存的大小、过期时间等参数,以满足不同的性能要求。Springboot Caffeine 是一个用于缓存的库,它可以用来缓存系统中的数据,以提高系统的性能。
Caffeine 可以通过配置来设置缓存的各种参数,例如缓存的大小、过期时间等。通过在 application.properties 文件中添加相应的配置项来进行配置:
# 缓存名称
spring.cache.cache-names=users
# 缓存的最大条目数
spring.cache.caffeine.users.maximum-size=1000
# 缓存的过期时间(单位:分钟)
spring.cache.caffeine.users.expire-after-write=60
上面是 Caffeine 缓存的基本使用方法,具体配置项可以参考官方文档了解更多细节。
本文使用开发环境
JDK:1.8
Caffeine:2.8.1
Maven
来源:https://juejin.cn/post/7175017156328423484
猜你喜欢
- FileOutPutStream:子类,写出数据的通道步骤:1.获取目标文件2.创建通道(如果原来没有目标文件,则会自动创建一个)3.写入数
- 前言使用Java8的新特性Stream流式处理,可以提高对于集合的一些操作效率,再配合lambda表达式,可以极致的简化代码,尤其还有并行流
- 系列文章已完成,目录如下:jdk-logging log4j logback日志系统实现机制原理介绍commons-lo
- 前言在Java System#exit 无法退出程序的问题一文末尾提到优雅停机的一种实现方案,要借助Shutdown Hook进行实现,本文
- 前言上一篇文章已经介绍了fluent-mybatis项目的构建,文章地址:Java Fluent Mybatis实战之构建项目与代码生成篇上
- Vector的基本介绍1.:Vector类的定义:public class Vector<E> ext
- 就网络和应用程序而言,键盘快捷键很重要,今天我们要谈的便是让这类快捷键得以在Flutter运作的小部件:Focus、Shortcuts和Ac
- 如下所示:String beginDate="1328007600000";SimpleDateFormat sdf=n
- 最近要做一个java web项目,因为页面不是很多,所以就没有前后端分离,前后端写在一起,这时候就用到thymeleaf了,以下是不动脑式的
- 简介Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能
- 前言在RocketMQ中为,我们创建消息生产者时,只需要设置NameServer地址,消息就能正确地发送到对应的Broker中,那么Rock
- Handler每个初学Android开发的都绕不开Handler这个“坎”,为什么说是个坎呢,首先这是Android架构的精髓之一,其次大部
- 在分布式系统中,我们会需要 ID 生成器的组件,这个组件可以实现帮助我们生成顺序的或者带业务含义的 ID。目前有很多经典的 ID 生成方式,
- 刚开始我以为熔断和降级是一体的,以为他们必须配合使用; 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西;降级什么是服务
- 1.多数据源配置类整体项目结构1).pom.xml 项目依赖<?xml version="1.0" encodin
- Spring Cloud feign GET请求无法用实体传参代码如下:@FeignClient(name = "eureka-c
- 过滤器实现过滤器需要实现 javax.servlet.Filter 接口。重写三个方法。其中 init() 方法在服务启动时执行,destr
- 从Java 5开始,Java语言对方法参数支持一种新写法,叫 可变长度参数列表,其语法就是类型后跟...,表示此处接受的参数为0到多个Obj
- cookie和session的区别和联系cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储
- 在没介绍正文之前,先给大家介绍下websocket的背景和原理:背景在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双