SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼
最近碰到的問題需要使用全局緩存。項目中沒有使用Redis,又是單體應(yīng)用,又要實(shí)現(xiàn)緩存那種時效性(HashMap沒有這種功能),后來找到了GuavaCache。Guava Cache是Google Guava庫中的一個模塊,提供了基于內(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)建一個全局的Cache實(shí)例使用。以下是對這兩種情況的創(chuàng)建使用說明。
①在服務(wù)類中創(chuàng)建緩存實(shí)例,對緩存進(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è)置緩存過期時間 .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)建了一個Guava Cache實(shí)例,并設(shè)置了寫入后10分鐘過期和最大容量為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ù)的過程 // ... return new Object(); } }
② 配置為SpringBean
這個也是常用的方式。適用于不需要包裝增強(qiáng)的情況。配置為Spring管理的Bean,可以在配置類中創(chuàng)建一個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ù)中,可以通過@Autowired
注解來注入這個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來緩存數(shù)據(jù)了。根據(jù)應(yīng)用需求調(diào)整緩存的過期時間和容量大小。
至此整合完成。
以上就是SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Guava Cache全局緩存的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springBoot基于webSocket實(shí)現(xiàn)掃碼登錄
最近做了個新項目,涉及到掃碼登錄。之前項目使用的是 ajax輪詢的方式。感覺太low了。所以這次用webSocket的方式進(jìn)行實(shí)現(xiàn),感興趣的可以了解一下2021-06-06Java 實(shí)戰(zhàn)項目錘煉之醫(yī)院門診收費(fèi)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實(shí)現(xiàn)一個醫(yī)院門診收費(fèi)管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11springboot3.0整合mybatis-flex實(shí)現(xiàn)逆向工程的示例代碼
逆向工程先創(chuàng)建數(shù)據(jù)庫表,由框架負(fù)責(zé)根據(jù)數(shù)據(jù)庫表,自動生成mybatis所要執(zhí)行的代碼,本文就來介紹一下springboot mybatis-flex逆向工程,感興趣的可以了解一下2024-06-06基于CopyOnWriteArrayList并發(fā)容器(實(shí)例講解)
下面小編就為大家?guī)硪黄贑opyOnWriteArrayList并發(fā)容器(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11MP(MyBatis-Plus)實(shí)現(xiàn)樂觀鎖更新功能的示例代碼
這篇文章主要介紹了MP(MyBatis-Plus)實(shí)現(xiàn)樂觀鎖更新功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01