网站首页 > java教程 正文
简介
之前在项目中遇到了一个新需求,领导让我使用本地缓存,来缓存数据库查出的用户信息,经过一番资料查阅和实验,最终确定了使用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;
}
复制代码
// 从数据库中查找用户信息
private User findByIdFromDb(Long id) {
// 这里省略了实现细节,假设从数据库中查找到了用户信息
return new User(id, "John Doe");
}
复制代码
在上面的代码中,我们使用了 Springboot 的 @Cacheable 注解来标记 findById 方法,表示该方法的返回值需要被缓存。
在方法中,我们使用 Caffeine 缓存 API 来操作缓存,例如获取缓存中的数据、更新缓存数据等。
通过使用 Springboot + Caffeine 实现本地缓存,我们可以提高系统的性能和响应速度,避免重复的计算和数据库访问。
此外,Springboot 提供了丰富的缓存配置选项,我们可以根据实际情况调整缓存的大小、过期时间等参数,以满足不同的性能要求。Springboot Caffeine 是一个用于缓存的库,它可以用来缓存系统中的数据,以提高系统的性能。Caffeine 是一个轻量级的 Java 库,并且与 Springboot 集成起来很容易。要在 Springboot 中使用 Caffeine,首先需要在 pom.xml 文件中添加 Caffeine 的依赖:
Copy code
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.5</version>
</dependency>
复制代码
然后,可以使用 @EnableCaching 注解启用缓存,并使用 @Cacheable 注解标记要缓存的方法:
Copy code
@EnableCaching
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Cacheable(value = "users", key = "#userId")
public User getUserById(Long userId) {
// 查询用户
}
}
复制代码
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
作者:Zeuss
链接:https://juejin.cn/post/7175017156328423484
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 上一篇: 缓存解决方案(缓存三大问题)
- 下一篇: 缓存 | 从本地缓存到分布式缓存(缓存实战)
猜你喜欢
- 2024-10-25 Caffeine高性能本地缓存框架初探(caffeine缓存原理)
- 2024-10-25 Redis学习3——Redis应用之缓存(redis的缓存的使用方式)
- 2024-10-25 Java高级——缓存的使用场景(java缓存机制)
- 2024-10-25 java中常用的几种缓存类型介绍(java常用缓存技术)
- 2024-10-25 本地缓存之王caffeine#代码(本地缓存 js)
- 2024-10-25 skywalking agent 本地缓存队列参数设置
- 2024-10-25 史上最实用的:分布式缓存方案(分布式缓存设计方案)
- 2024-10-25 使用Guava作为本地缓存让系统飞起来
- 2024-10-25 深究分布式缓存的九个点(分布式缓存技术有哪些)
- 2024-10-25 面试题之java缓存总结,从单机缓存到分布式缓存架构
你 发表评论:
欢迎- 最近发表
-
- pyinstaller打包python程序高级技巧
- 将python打包成exe的方式(python打包成exe的方法)
- Python打包:如何将 Flask 项目打包成exe程序
- py2exe实现python文件打包为.exe可执行程序(上篇)
- 如何将 Python 项目打包成 exe,另带卸载功能!
- Python打包成 exe,太大了该怎么解决?
- 可视化 Python 打包 exe,这个神器绝了!
- 案例详解pyinstaller将python程序打包为可执行文件exe
- Cocos 3.x 菜鸟一起玩:打包window程序
- 怎么把 Python + Flet 开发的程序,打包为 exe ?这个方法很简单!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)