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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置

發(fā)布時(shí)間:2023/12/3 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

caffeine 緩存

緩存是幾乎所有應(yīng)用程序性能的關(guān)鍵。 有時(shí)需要分布式緩存 ,但并非總是如此。 在許多情況下,本地緩存可以很好地工作,并且不需要分布式緩存的開(kāi)銷和復(fù)雜性。

因此,在許多應(yīng)用程序中,包括普通的Spring和Spring Boot,您可以在任何方法上使用@Cacheable ,其結(jié)果將被緩存,以便下次調(diào)用該方法時(shí),將返回緩存的結(jié)果。

Spring有一些默認(rèn)的緩存管理器實(shí)現(xiàn),但是外部庫(kù)總是比簡(jiǎn)單的實(shí)現(xiàn)更好,更靈活。 例如,咖啡因是一種高性能的 Java緩存庫(kù) 。 Spring Boot帶有CaffeineCacheManager 。 因此,理想情況下,這就是您所需要的一切–您只需創(chuàng)建一個(gè)緩存管理器bean,并為@Cacheable注釋方法進(jìn)行緩存。

但是,提供的緩存管理器僅允許您配置一個(gè)緩存規(guī)范。 緩存規(guī)范包括到期時(shí)間,初始容量,最大大小等。因此,將使用單個(gè)緩存規(guī)范來(lái)創(chuàng)建此緩存管理器下的所有緩存。 高速緩存管理器支持預(yù)定義高速緩存以及動(dòng)態(tài)創(chuàng)建的高速緩存的列表,但是在兩種情況下都使用單個(gè)高速緩存規(guī)范。 這對(duì)于生產(chǎn)來(lái)說(shuō)很少有用。 通常,內(nèi)置緩存管理器是您必須要小心的地方 。

有一些 博客文章告訴您如何使用自定義規(guī)范定義自定義緩存。 但是,這些選項(xiàng)不支持內(nèi)置管理器支持的動(dòng)態(tài)默認(rèn)緩存規(guī)范用例。 理想情況下,您應(yīng)該能夠使用@Cacheable任何名稱,并且應(yīng)該使用某些默認(rèn)規(guī)范自動(dòng)創(chuàng)建緩存,但是您還應(yīng)該選擇覆蓋特定緩存的名稱。

這就是為什么我決定使用一種比在代碼中定義所有緩存來(lái)提高靈活性的簡(jiǎn)單方法。 它擴(kuò)展了CaffeineCacheManager以提供該功能:

/** * Extending Caffeine cache manager to allow flexible per-cache configuration */ public class FlexibleCaffeineCacheManager extends CaffeineCacheManager implements InitializingBean { private Map<String, String> cacheSpecs = new HashMap<>(); private Map<String, Caffeine<Object, Object>> builders = new HashMap<>(); private CacheLoader cacheLoader; @Override public void afterPropertiesSet() throws Exception { for (Map.Entry<String, String> cacheSpecEntry : cacheSpecs.entrySet()) { builders.put(cacheSpecEntry.getKey(), Caffeine.from(cacheSpecEntry.getValue())); } } @Override @SuppressWarnings ( "unchecked" ) protected Cache<Object, Object> createNativeCaffeineCache(String name) { Caffeine<Object, Object> builder = builders.get(name); if (builder == null ) { return super .createNativeCaffeineCache(name); } if ( this .cacheLoader != null ) { return builder.build( this .cacheLoader); } else { return builder.build(); } } public Map<String, String> getCacheSpecs() { return cacheSpecs; } public void setCacheSpecs(Map<String, String> cacheSpecs) { this .cacheSpecs = cacheSpecs; } public void setCacheLoader(CacheLoader cacheLoader) { super .setCacheLoader(cacheLoader); this .cacheLoader = cacheLoader; } }

簡(jiǎn)而言之,它會(huì)根據(jù)規(guī)格創(chuàng)建一個(gè)咖啡因生成器,并在需要新的緩存時(shí)使用它而不是默認(rèn)生成器。

然后,樣本XML配置將如下所示:

< bean id = "cacheManager" class = "net.bozho.util.FlexibleCaffeineCacheManager" > < property name = "cacheSpecification" value = "expireAfterWrite=10m" /> < property name = "cacheSpecs" > < map > < entry key = "statistics" value = "expireAfterWrite=1h" /> </ map > </ property > </ bean >

使用Java配置,它非常簡(jiǎn)單–您只需設(shè)置cacheSpecs映射即可。

雖然Spring已經(jīng)變成了一個(gè)提供各種功能的龐大框架,但它并沒(méi)有放棄可擴(kuò)展性的設(shè)計(jì)原則。

擴(kuò)展內(nèi)置框架類經(jīng)常發(fā)生,并且應(yīng)該在每個(gè)人的工具箱中。 創(chuàng)建這些類時(shí)要考慮到擴(kuò)展名-您會(huì)注意到CaffeineCacheManager中的許多方法都protected 。 因此,我們應(yīng)該在需要時(shí)利用它。

翻譯自: https://www.javacodegeeks.com/2019/05/multiple-cache-configurations-caffeine-spring-boot.html

caffeine 緩存

總結(jié)

以上是生活随笔為你收集整理的caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。