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

