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(); //设置全局配置的本地缓存 List globalCacheNames=caffeineCacheProperties.getCacheName(); if(globalCacheNames!=null&&!globalCacheNames.isEmpty()){ addCacheObject(cacheMap,globalCacheNames,caffeineCacheProperties.getExpireAfterWrite(), caffeineCacheProperties.getExpireAfterAccess(),caffeineCacheProperties.getMaximumSize()); } //设置自定义属性缓存,可以覆盖全局缓存 List configs=caffeineCacheProperties.getConfigs(); if(configs!=null&&!configs.isEmpty()){ for(CaffeineCacheProperties.Configconfig:configs){ List cacheNames=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(Map cacheMap,List cacheNames,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); privateList configs; @Getter @Setter publicstaticclassConfig{ privateList cacheName; 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。