日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot Cache使用与整合

發布時間:2023/12/13 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot Cache使用与整合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:

  • 史上最全的Spring Boot Cache使用與整合
  • Spring Cache擴展:注解失效時間+主動刷新緩存
    • 項目地址


使用本地Caffeine緩存

引入依賴包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>2.6.2</version> </dependency>

自定義Caffeine配置

  • CachingConfig.java
package com.vcredit.vmp.checkcenter.config; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.vcredit.vmp.checkcenter.common.properties.CaffeineCacheProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.caffeine.CaffeineCache; import org.springframework.cache.support.SimpleCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;import java.time.Duration; import java.util.*; /*** 緩存配置* @author kancy*/ @Configuration @EnableCaching public class CachingConfig {@AutowiredCaffeineCacheProperties caffeineCacheProperties;/*** 創建基于Caffeine的Cache Manager* @return*/@Bean@Primary@ConditionalOnProperty(prefix = "system.cache.caffeine" , name = "enabled", havingValue = "true")public CacheManager caffeineCacheManager() {SimpleCacheManager cacheManager = new SimpleCacheManager();Map<String, CaffeineCache> cacheMap = new HashMap();// 設置全局配置的本地緩存List<String> globalCacheNames = caffeineCacheProperties.getCacheName();if(globalCacheNames !=null && !globalCacheNames.isEmpty()){addCacheObject(cacheMap, globalCacheNames, caffeineCacheProperties.getExpireAfterWrite(),caffeineCacheProperties.getExpireAfterAccess(), caffeineCacheProperties.getMaximumSize());}// 設置自定義屬性緩存, 可以覆蓋全局緩存List<CaffeineCacheProperties.Config> configs = caffeineCacheProperties.getConfigs();if(configs != null && !configs.isEmpty()){for (CaffeineCacheProperties.Config config : configs) {List<String> cacheNames = config.getCacheName();if (cacheNames == null || cacheNames.isEmpty()){continue;}Duration expireAfterWrite = Optional.ofNullable(config.getExpireAfterWrite()).orElse(caffeineCacheProperties.getExpireAfterWrite());Duration expireAfterAccess = Optional.ofNullable(config.getExpireAfterAccess()).orElse(caffeineCacheProperties.getExpireAfterAccess());Long maximumSize = Optional.ofNullable(config.getMaximumSize()).orElse(caffeineCacheProperties.getMaximumSize());addCacheObject(cacheMap, cacheNames, expireAfterWrite, expireAfterAccess, maximumSize);}}// 加入到緩存管理器進行管理cacheManager.setCaches(cacheMap.values());return cacheManager;}private void addCacheObject(Map<String, CaffeineCache> cacheMap, List<String> cacheNames, Duration expireAfterWrite, Duration expireAfterAccess, Long maximumSize) {for (String cacheName : cacheNames) {// spring.cache.caffeine: maximumSize=500,expireAfterAccess=10s,expireAfterWrite=15sCaffeine<Object, Object> recordStats = Caffeine.newBuilder().recordStats().maximumSize(maximumSize);if(expireAfterAccess != null) recordStats.expireAfterAccess(expireAfterAccess);if(expireAfterWrite != null) recordStats.expireAfterWrite(expireAfterWrite);Cache<Object, Object> cache = recordStats.build();CaffeineCache caffeineCache = new CaffeineCache(cacheName,cache);// 覆蓋添加cacheMap.put(cacheName, caffeineCache);}} }
  • CaffeineCacheProperties.java
package com.vcredit.vmp.checkcenter.common.properties;import lombok.Getter; import lombok.Setter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;import java.time.Duration; import java.util.List;/*** Caffeine本地緩存自定義配置* @author kancy*/ @Getter @Setter @Configuration @ConfigurationProperties("system.cache.caffeine") @ConditionalOnProperty(prefix = "system.cache.caffeine" , name = "enabled", havingValue = "true") public class CaffeineCacheProperties {private List<String> cacheName;private Duration expireAfterWrite;private Duration expireAfterAccess;private Long maximumSize = Long.valueOf(-1);private List<Config> configs;@Getter@Setterpublic static class Config {private List<String> cacheName;Duration expireAfterWrite;Duration expireAfterAccess;Long maximumSize;} }
  • application.yml
system.cache.caffeine:enabled: true# 全局配置cacheName: cache1,cache2,cache3expireAfterWrite: 60sexpireAfterAccess: 30smaximumSize: 500# 自定義配置,cacheName相同可覆蓋全局configs:- cacheName: checkApplyCacheexpireAfterAccess: 10s- cacheName: userQueryCacheexpireAfterAccess: 15s

使用緩存

@Cacheable(value = { "checkApplyCache" }, key="#req.md5") public Result check(CheckReq req) {// your code...return Result.ok(); }

轉載于:https://www.cnblogs.com/kancy/p/11162950.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Spring Boot Cache使用与整合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。