SpringBoot整合Caffeine使用示例
簡(jiǎn)單介紹
- 在需要緩存的方法上使用
@Cacheable
注解來(lái)緩存方法的返回值:
import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class MyService { @Cacheable(cacheNames = "myCache", key = "#id") public String getExpensiveDataById(Integer id) { // 模擬耗時(shí)操作 return "Some expensive data for id: " + id; } }
getExpensiveDataById
方法的結(jié)果將根據(jù)傳入的id
被緩存。如果同樣的id
再次請(qǐng)求,將直接從緩存中獲取結(jié)果,而不會(huì)執(zhí)行方法體中的耗時(shí)操作。
cacheNames
屬性定義了緩存的邏輯名稱(chēng),它是一個(gè)字符串。在Spring的緩存框架中,這個(gè)名稱(chēng)被用來(lái)唯一標(biāo)識(shí)一個(gè)緩存區(qū)域。
緩存區(qū)域是底層緩存存儲(chǔ)中的一部分,可以把它想象成一個(gè)命名的存儲(chǔ)空間,其中可以存放多個(gè)鍵值對(duì)。每個(gè)緩存名稱(chēng)對(duì)應(yīng)一個(gè)緩存區(qū)域。
緩存區(qū)域內(nèi)部以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù)。每個(gè)鍵值對(duì)包含一個(gè)鍵(key)和相應(yīng)的值(value)。
- 使用
@CacheEvict
注解手動(dòng)清除緩存。
import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; @Service public class MyService { @CacheEvict(cacheNames = "myCache", allEntries = true) public void clearMyCache() { // 清除名為myCache的緩存中的所有項(xiàng) } }
示例
新建一個(gè)Spring項(xiàng)目。Caffeine已經(jīng)作為默認(rèn)的緩存庫(kù)被包含在Spring Boot的依賴(lài)中,所以通常不需要顯式添加Caffeine的依賴(lài)。
配置相關(guān)屬性
# application.properties 示例 spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=30m
Controller
@RestController @Slf4j public class MyController { @Resource private MyService myService; @GetMapping("/cache") public String cache() { log.info("收到了增加緩存請(qǐng)求"); return myService.getExpensiveDataById(1); } @GetMapping("/cache/del") public void delCache() { log.info("收到了刪除緩存請(qǐng)求"); myService.deleteExpensiveDataById(1); } }
Service
@Service @Slf4j public class MyService { @Cacheable(cacheNames = "myCache", key = "#id") public String getExpensiveDataById(Integer id) { // 模擬耗時(shí)操作 log.info("執(zhí)行了操作"); return "Some expensive data for id: " + id; } @CacheEvict(cacheNames = "myCache", key = "#id") public void deleteExpensiveDataById(Integer id) { // 模擬刪除操作 log.info("執(zhí)行了刪除操作"); } }
測(cè)試步驟
1. 運(yùn)行項(xiàng)目,打開(kāi)瀏覽器,輸入請(qǐng)求地址localhost:8080/cache
,看到日志輸出如下:
2. 刷新地址,發(fā)現(xiàn)日志輸出如下:
3. 說(shuō)明這次請(qǐng)求走了緩存 3. 輸入請(qǐng)求地址localhost:8080/cache/del
,日志輸出如下
4. 再次請(qǐng)求地址lcoalhost:8080/cache
,日志輸出如下
說(shuō)明上一次的刪除緩存已經(jīng)起效果。
到此這篇關(guān)于SpringBoot整合Caffeine使用示例的文章就介紹到這了,更多相關(guān)SpringBoot整合Caffeine內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot攔截器實(shí)現(xiàn)項(xiàng)目防止接口重復(fù)提交
基于SpringBoot框架來(lái)開(kāi)發(fā)業(yè)務(wù)后臺(tái)項(xiàng)目時(shí),接口重復(fù)提交是一個(gè)常見(jiàn)的問(wèn)題,本文主要介紹了SpringBoot攔截器實(shí)現(xiàn)項(xiàng)目防止接口重復(fù)提交,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Java中的三種標(biāo)準(zhǔn)注解和四種元注解說(shuō)明
這篇文章主要介紹了Java中的三種標(biāo)準(zhǔn)注解和四種元注解說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Spring?boot?security權(quán)限管理集成cas單點(diǎn)登錄功能的實(shí)現(xiàn)
這篇文章主要介紹了Spring?boot?security權(quán)限管理集成cas單點(diǎn)登錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03導(dǎo)入renren-fast出現(xiàn)問(wèn)題以及解決方案
文章介紹了在導(dǎo)入renren-fast項(xiàng)目時(shí)遇到的maven繼承parent問(wèn)題,并提供了解決方案,即在pom文件中添加``標(biāo)簽,此外,還詳細(xì)解釋了Maven的``標(biāo)簽的作用以及MAVEN構(gòu)建jar包時(shí)的查找順序2024-11-11Java精品項(xiàng)目瑞吉外賣(mài)之員工信息管理篇
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣(mài)訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為員工信息分頁(yè)查詢(xún)與啟用或禁用員工狀態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Java 回調(diào)機(jī)制(CallBack) 詳解及實(shí)例代碼
這篇文章主要介紹了 Java 回調(diào)機(jī)制(CallBack) 詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Java線(xiàn)程之join_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
join() 定義在Thread.java中,下文通過(guò)源碼分享join(),需要的朋友參考下吧2017-05-05