springboot集合caffeine实现本地缓存(模板,可直接cv)

本文主要是介绍springboot集合caffeine实现本地缓存(模板,可直接cv),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CacheConfig 配置

要在项目中使用下本地缓存,方便更快的调用数据, 查询了很多文档发现都比较冗余,于是自己摸索了好一会才整理出一套能用的模板。文末附上了完整代码

  1. 引入pom.xml
		<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency>
  1. 定义一个缓存key生成的规则,后续被cacheable调用。
 /*** 自定义的key生成规则.* @return*/@Bean("dataKeyGenerator")public KeyGenerator dataKeyGenerator() {return (o, method, objects) -> method.getName() + "_" + Arrays.asList(objects);}
  1. 定义cacheManager管理缓存
 @Beanpublic CacheManager cacheManager(Ticker ticker) {// 缓存的数据,有效期60分钟,可以一次性配置多个CaffeineCache dataClustersCache = buildCache("data_types_clusters", ticker, 60);CaffeineCache dataHostCache = buildCache("data_types_hosts", ticker, 60);SimpleCacheManager manager = new SimpleCacheManager();// 一起放入manager.setCaches(Arrays.asList(dataClustersCache, dataHostCache));return manager;}
  1. 初始化CaffeineCache配置,只需要关注几个属性

expireAfterWrite 最后一次写入后经过固定时间过期
expireAfterAccess 最后一次写入或访问后经过固定时间过期
refreshAfterWrite 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
一般使用用expireAfterWrite 即可

private CaffeineCache buildCache(String name, Ticker ticker, int minutesToExpire) {return new CaffeineCache(name, Caffeine.newBuilder().expireAfterWrite(minutesToExpire, TimeUnit.MINUTES).maximumSize(100).ticker(ticker).build());}
  1. 比较简单,直接上完整代码

import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.Ticker;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Arrays;
import java.util.concurrent.TimeUnit;/** springboot的caffeine本地缓存配置.*/
@Slf4j
@Configuration
public class CacheConfig {@Datapublic static class CacheSpec {private Integer timeout;private Integer max = 200;}@Beanpublic CacheManager cacheManager(Ticker ticker) {// 下拉框的数据,有效期60分钟CaffeineCache dataTest1 = buildCache("data_types_test1", ticker, 60);CaffeineCache dataTest2 = buildCache("data_types_test2", ticker, 60);SimpleCacheManager manager = new SimpleCacheManager();manager.setCaches(Arrays.asList(dataTest1 , dataTest2 ));return manager;}private CaffeineCache buildCache(String name, Ticker ticker, int minutesToExpire) {return new CaffeineCache(name, Caffeine.newBuilder().expireAfterWrite(minutesToExpire, TimeUnit.MINUTES).maximumSize(100).ticker(ticker).build());}/*** 自定义的key生成规则.* @return*/@Bean("dataKeyGenerator")public KeyGenerator dataKeyGenerator() {return (o, method, objects) -> method.getName() + "_" + Arrays.asList(objects);}@Beanpublic Ticker ticker() {return Ticker.systemTicker();}
}

使用的时候只需要把cacheManager中自己需要的key,写入即可

@EnableCaching

启动方法类上添加注解@EnableCaching

具体使用

	@Override@Cacheable(cacheNames = "data_types_test1", keyGenerator = "dataKeyGenerator")public List<String> test() {return xxx;}

CV后要修改的其实就是一个manager,以及自己要使用的方法上添加下对应的cacheable注解即可。

注意一个问题,controller调用service的test()会调用缓存,但是如果是service内部间的调用test(), 并不会触发缓存。目前也不知道原因。

这篇关于springboot集合caffeine实现本地缓存(模板,可直接cv)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274817

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服