SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼
最近碰到的問題需要使用全局緩存。項(xiàng)目中沒有使用Redis,又是單體應(yīng)用,又要實(shí)現(xiàn)緩存那種時(shí)效性(HashMap沒有這種功能),后來(lái)找到了GuavaCache。Guava Cache是Google Guava庫(kù)中的一個(gè)模塊,提供了基于內(nèi)存的本地緩存實(shí)現(xiàn)。以下是整合使用Guava Cache的具體步驟:
一、添加Maven依賴
<dependencies> <!-- 其他依賴 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency> </dependencies>
二、創(chuàng)建Cache實(shí)例
可以包裝增強(qiáng)Cache實(shí)例再使用,或者直接創(chuàng)建一個(gè)全局的Cache實(shí)例使用。以下是對(duì)這兩種情況的創(chuàng)建使用說(shuō)明。
①在服務(wù)類中創(chuàng)建緩存實(shí)例,對(duì)緩存進(jìn)行包裝,再使用。
import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.util.concurrent.TimeUnit; @Service public class MyService { private final Cache<String, Object> myCache; public MyService() { this.myCache = CacheBuilder.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) // 設(shè)置緩存過(guò)期時(shí)間 .maximumSize(100) // 設(shè)置緩存最大容量 .build(); } public Object getFromCache(String key) { return myCache.getIfPresent(key); } public void putIntoCache(String key, Object value) { myCache.put(key, value); } // 其他業(yè)務(wù)邏輯... }
在上面的例子中,創(chuàng)建了一個(gè)Guava Cache實(shí)例,并設(shè)置了寫入后10分鐘過(guò)期和最大容量為100條記錄的限制。
使用guava cache:
public TestService{ @Autowired MyService myService; public Object getData(String key) { Object cachedData = myService.getFromCache(key); if (cachedData != null) { return cachedData; } // 如果緩存中沒有數(shù)據(jù),則從數(shù)據(jù)源獲取并放入緩存 Object newData = fetchDataFromDataSource(key); myService.putIntoCache(key, newData); return newData; } private Object fetchDataFromDataSource(String key) { // 模擬從數(shù)據(jù)源獲取數(shù)據(jù)的過(guò)程 // ... return new Object(); } }
② 配置為SpringBean
這個(gè)也是常用的方式。適用于不需要包裝增強(qiáng)的情況。配置為Spring管理的Bean,可以在配置類中創(chuàng)建一個(gè)Bean。
import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; @Configuration public class CacheConfig { @Bean public Cache<String, Object> myCache() { return CacheBuilder.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .maximumSize(100) .build(); } }
然后,在服務(wù)中,可以通過(guò)@Autowired
注解來(lái)注入這個(gè)Bean:
import com.google.common.cache.Cache; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyTestService { private final Cache<String, Object> myCache; @Autowired public MyTestService(Cache<String, Object> myCache) { this.myCache = myCache; } // 使用myCache進(jìn)行緩存操作... }
這樣,就可以在Spring Boot應(yīng)用中輕松地使用Guava Cache來(lái)緩存數(shù)據(jù)了。根據(jù)應(yīng)用需求調(diào)整緩存的過(guò)期時(shí)間和容量大小。
至此整合完成。
以上就是SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Guava Cache全局緩存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springBoot基于webSocket實(shí)現(xiàn)掃碼登錄
最近做了個(gè)新項(xiàng)目,涉及到掃碼登錄。之前項(xiàng)目使用的是 ajax輪詢的方式。感覺太low了。所以這次用webSocket的方式進(jìn)行實(shí)現(xiàn),感興趣的可以了解一下2021-06-06Java 實(shí)戰(zhàn)項(xiàng)目錘煉之醫(yī)院門診收費(fèi)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實(shí)現(xiàn)一個(gè)醫(yī)院門診收費(fèi)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11springboot3.0整合mybatis-flex實(shí)現(xiàn)逆向工程的示例代碼
逆向工程先創(chuàng)建數(shù)據(jù)庫(kù)表,由框架負(fù)責(zé)根據(jù)數(shù)據(jù)庫(kù)表,自動(dòng)生成mybatis所要執(zhí)行的代碼,本文就來(lái)介紹一下springboot mybatis-flex逆向工程,感興趣的可以了解一下2024-06-06Java動(dòng)態(tài)腳本Groovy獲取Bean技巧
這篇文章主要給大家分享的是Java動(dòng)態(tài)腳本Groovy獲取Bean技巧,在Java代碼中當(dāng)我們需要一個(gè)Bean對(duì)象,通常會(huì)使用spring中@Autowired注解,用來(lái)自動(dòng)裝配對(duì)象。下面我們一起進(jìn)入文章學(xué)習(xí)個(gè)表格多 詳細(xì)內(nèi)容吧2021-12-12基于CopyOnWriteArrayList并發(fā)容器(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇基于CopyOnWriteArrayList并發(fā)容器(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11MP(MyBatis-Plus)實(shí)現(xiàn)樂觀鎖更新功能的示例代碼
這篇文章主要介紹了MP(MyBatis-Plus)實(shí)現(xiàn)樂觀鎖更新功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01