Spring Boot Cache使用方法整合代码实例
参考:
SpringCache扩展功能实现
项目地址
使用本地Caffeine缓存
引入依赖包
org.springframework.boot spring-boot-starter-cache com.github.ben-manes.caffeine caffeine 2.6.2
自定义Caffeine配置
CachingConfig.java
packagecom.vcredit.vmp.checkcenter.config;
importcom.github.benmanes.caffeine.cache.Cache;
importcom.github.benmanes.caffeine.cache.Caffeine;
importcom.vcredit.vmp.checkcenter.common.properties.CaffeineCacheProperties;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
importorg.springframework.cache.CacheManager;
importorg.springframework.cache.annotation.EnableCaching;
importorg.springframework.cache.caffeine.CaffeineCache;
importorg.springframework.cache.support.SimpleCacheManager;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.context.annotation.Primary;
importjava.time.Duration;
importjava.util.*;
/**
*缓存配置
*@authorkancy
*/
@Configuration
@EnableCaching
publicclassCachingConfig{
@Autowired
CaffeineCachePropertiescaffeineCacheProperties;
/**
*创建基于Caffeine的CacheManager
*@return
*/
@Bean
@Primary
@ConditionalOnProperty(prefix="system.cache.caffeine",name="enabled",havingValue="true")
publicCacheManagercaffeineCacheManager(){
SimpleCacheManagercacheManager=newSimpleCacheManager();
MapcacheMap=newHashMap();
//设置全局配置的本地缓存
ListglobalCacheNames=caffeineCacheProperties.getCacheName();
if(globalCacheNames!=null&&!globalCacheNames.isEmpty()){
addCacheObject(cacheMap,globalCacheNames,caffeineCacheProperties.getExpireAfterWrite(),
caffeineCacheProperties.getExpireAfterAccess(),caffeineCacheProperties.getMaximumSize());
}
//设置自定义属性缓存,可以覆盖全局缓存
Listconfigs=caffeineCacheProperties.getConfigs();
if(configs!=null&&!configs.isEmpty()){
for(CaffeineCacheProperties.Configconfig:configs){
ListcacheNames=config.getCacheName();
if(cacheNames==null||cacheNames.isEmpty()){
continue;
}
DurationexpireAfterWrite=Optional.ofNullable(config.getExpireAfterWrite()).orElse(caffeineCacheProperties.getExpireAfterWrite());
DurationexpireAfterAccess=Optional.ofNullable(config.getExpireAfterAccess()).orElse(caffeineCacheProperties.getExpireAfterAccess());
LongmaximumSize=Optional.ofNullable(config.getMaximumSize()).orElse(caffeineCacheProperties.getMaximumSize());
addCacheObject(cacheMap,cacheNames,expireAfterWrite,expireAfterAccess,maximumSize);
}
}
//加入到缓存管理器进行管理
cacheManager.setCaches(cacheMap.values());
returncacheManager;
}
privatevoidaddCacheObject(MapcacheMap,ListcacheNames,DurationexpireAfterWrite,DurationexpireAfterAccess,LongmaximumSize){
for(StringcacheName:cacheNames){
//spring.cache.caffeine:maximumSize=500,expireAfterAccess=10s,expireAfterWrite=15s
Caffeine
CaffeineCacheProperties.java
packagecom.vcredit.vmp.checkcenter.common.properties;
importlombok.Getter;
importlombok.Setter;
importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.context.annotation.Configuration;
importjava.time.Duration;
importjava.util.List;
/**
*Caffeine本地缓存自定义配置
*@authorkancy
*/
@Getter
@Setter
@Configuration
@ConfigurationProperties("system.cache.caffeine")
@ConditionalOnProperty(prefix="system.cache.caffeine",name="enabled",havingValue="true")
publicclassCaffeineCacheProperties{
privateListcacheName;
privateDurationexpireAfterWrite;
privateDurationexpireAfterAccess;
privateLongmaximumSize=Long.valueOf(-1);
privateListconfigs;
@Getter
@Setter
publicstaticclassConfig{
privateListcacheName;
DurationexpireAfterWrite;
DurationexpireAfterAccess;
LongmaximumSize;
}
}
application.yml
system.cache.caffeine: enabled:true #全局配置 cacheName:cache1,cache2,cache3 expireAfterWrite:60s expireAfterAccess:30s maximumSize:500 #自定义配置,cacheName相同可覆盖全局 configs: -cacheName:checkApplyCache expireAfterAccess:10s -cacheName:userQueryCache expireAfterAccess:15s
使用缓存
@Cacheable(value={"checkApplyCache"},key="#req.md5")
publicResultcheck(CheckReqreq){
//yourcode...
returnResult.ok();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。