springboot整合guava實(shí)現(xiàn)本地緩存的示例代碼
一、Springboot緩存
SpringBoot支持很多種緩存方式:redis、guava、ehcahe、jcache等等。
二、guava介紹
Guava Cache 是 Google 開源的一套開發(fā)工具集合,Guava Cache 是其中的一個(gè)專門用于處理本地緩存的輕量級(jí)框架,是全內(nèi)存方式的本地緩存,而且是線程安全的。
和 ConcurrentMap 相比,Guava Cache 可以限制內(nèi)存的占用,并可設(shè)置緩存的過期時(shí)間,可以自動(dòng)回收數(shù)據(jù),而 ConcurrentMap 只能通過靜態(tài)方式來控制緩存,移除數(shù)據(jù)元素需要顯示的方式來移除。
三、 緩存回收方式
1、基于容量回收
2、基于時(shí)間回收
3、基于引用回收
CacheBuilder.weakValues():和 CacheBuilder.weakKeys() 方法類似,該方法按照弱引用方式來存儲(chǔ)緩存項(xiàng)的值,允許系統(tǒng)垃圾回收時(shí)回收緩存項(xiàng)。
CacheBuilder.weakValues(),使用軟引用方式來包裝緩存值,只有在內(nèi)存需要時(shí)(一般在接近內(nèi)存溢出時(shí)),系統(tǒng)會(huì)按照全局LRU(least-recently-used)原則進(jìn)行垃圾回收??紤]到垃圾回收的性能問題,推薦使用基于容量的回收方式。
4、手動(dòng)回收
guava使用
導(dǎo)入依賴
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency>
recordStats:開啟統(tǒng)計(jì)功能
stats:查看統(tǒng)計(jì)情況
void testRecordStats(){ Cache<String, String> callCache = CacheBuilder.newBuilder(). initialCapacity(5) .maximumSize(100) .recordStats() .expireAfterAccess(1, TimeUnit.SECONDS) .build(); /** * CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadExceptionCount=0, totalLoadTime=0, evictionCount=0} */ CacheStats stats = callCache.stats(); System.out.println(stats); }
并發(fā)級(jí)別
調(diào)整concurrencyLevel即可
5、代碼實(shí)例
/** * @Author sprem至尊 * @Date 2022/10/24 19:39 * @Version 1.0 */ package com.cn.xiaonuo.modular.wechat.cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @Component public class TokenCache { private static LoadingCache<String,String> loadingCache = CacheBuilder .newBuilder().initialCapacity(100).maximumSize(100) .expireAfterWrite(7000, TimeUnit.SECONDS) .build(new CacheLoader<String, String>() { @Override public String load(String key) throws Exception { return null; } }); public static void setKey(String key,String value){ loadingCache.put(key, value); } public static String getValue(String key){ String value = null; try{ value = loadingCache.get(key); if(value == null){ return null; } return value; }catch (Exception e){ return null; } } }
到此這篇關(guān)于springboot整合guava實(shí)現(xiàn)本地緩存的示例代碼的文章就介紹到這了,更多相關(guān)springboot guava本地緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java設(shè)計(jì)模式之觀察者模式學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之觀察者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01springboot 使用zookeeper實(shí)現(xiàn)分布式隊(duì)列的基本步驟
這篇文章主要介紹了springboot 使用zookeeper實(shí)現(xiàn)分布式隊(duì)列,通過ZooKeeper的協(xié)調(diào)和同步機(jī)制,多個(gè)應(yīng)用程序可以共享一個(gè)隊(duì)列,并按照先進(jìn)先出的順序處理隊(duì)列中的消息,需要的朋友可以參考下2023-08-08Java JDK動(dòng)態(tài)代理的基本原理詳細(xì)介紹
這篇文章主要介紹了Java JDK動(dòng)態(tài)代理的基本原理詳細(xì)介紹的相關(guān)資料,這里對(duì)動(dòng)態(tài)代理進(jìn)行了詳解并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下2017-01-01springboot項(xiàng)目訪問靜態(tài)資源的配置代碼實(shí)例
這篇文章主要介紹了springboot項(xiàng)目訪問靜態(tài)資源的配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring Boot異步調(diào)用@Async過程詳解
這篇文章主要介紹了Spring Boot異步調(diào)用@Async過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11詳解如何在SpringBoot中實(shí)現(xiàn)優(yōu)雅關(guān)閉
這篇文章主要介紹了如何在SpringBoot中實(shí)現(xiàn)優(yōu)雅關(guān)閉,SpringBoot應(yīng)用程序的關(guān)閉可以是崩潰,也可以是手動(dòng)關(guān)閉的,Shutdown、Crash 和 Graceful 之間的區(qū)別在于,它控制決定了我們可以用這個(gè)事件做什么,本文中,一起研究下Spring Boot提供的開箱即用功能之一:優(yōu)雅關(guān)閉2024-09-09