Springboot使用@Cacheable注解實(shí)現(xiàn)數(shù)據(jù)緩存
1、添加 @EnableCaching
使用 @EnableCaching 標(biāo)識(shí)在 SpringBoot 的主啟動(dòng)類(lèi)上,開(kāi)啟基于注解的緩存。
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application .class, args);
}
}2、添加@Cacheable
在需要緩存的方法上添加@Cacheable注解。以后查詢(xún)相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法。
@Cacheable(value = "areaTreeData")
public CommonResult<List<Map<String, Object>>> queryTreeData(Long pId, Long lv) {
Map<String, Object> map = new HashMap<>();
map.put("state", 1);
List<Map<String, Object>> list = getTreeData(map, pId, lv);
return new CommonResult<>(list);
}
注意:1、返回的數(shù)據(jù)類(lèi)型必須支持序列化或?qū)崿F(xiàn)了Serializable接口,否則數(shù)據(jù)沒(méi)法緩存。
2、只有直接調(diào)用該方法才能緩存,不能通過(guò)類(lèi)中的其他方法來(lái)調(diào)用。
3、常用屬性說(shuō)明
- cacheNames/value :用來(lái)指定緩存組件的名字
- key :緩存數(shù)據(jù)時(shí)使用的 key,可以用它來(lái)指定。默認(rèn)是使用方法參數(shù)的值。(這個(gè) key 你可以使用 spEL 表達(dá)式來(lái)編寫(xiě))
- keyGenerator :key 的生成器。 key 和 keyGenerator 二選一使用
- cacheManager :可以用來(lái)指定緩存管理器。從哪個(gè)緩存管理器里面獲取緩存。
- condition :可以用來(lái)指定符合條件的情況下才緩存
- unless :否定緩存。當(dāng) unless 指定的條件為 true ,方法的返回值就不會(huì)被緩存。當(dāng)然你也可以獲取到結(jié)果進(jìn)行判斷。(通過(guò) #result 獲取方法結(jié)果)
- sync :是否使用異步模式。
4、@CacheEvict注解
@CachEvict 的作用 主要針對(duì)方法配置,能夠根據(jù)一定的條件對(duì)緩存進(jìn)行清空。常用屬性參數(shù)如下:
| 參數(shù) | 解釋 | example |
|---|---|---|
| value | 緩存的名稱(chēng),在 spring 配置文件中定義,必須指定至少一個(gè) | @CacheEvict(value=”my cache”) |
| key | 緩存的 key,可以為空,如果指定要按照 SpEL 表達(dá)式編寫(xiě),如果不指定,則缺省按照方法的所有參數(shù)進(jìn)行組合 | @CacheEvict(value=”testcache”,key=”#userName”) |
| condition | 緩存的條件,可以為空,使用 SpEL 編寫(xiě),返回 true 或者 false,只有為 true 才進(jìn)行緩存 | @CacheEvict(value=”testcache”,condition=”#userName.length()>2”) |
| allEntries | 是否清空所有緩存內(nèi)容,缺省為 false,如果指定為 true,則方法調(diào)用后將立即清空所有緩存 | @CachEvict(value=”testcache”,allEntries=true) |
| beforeInvocation | 是否在方法執(zhí)行前就清空,缺省為 false,如果指定為 true,則在方法還沒(méi)有執(zhí)行的時(shí)候就清空緩存,缺省情況下,如果方法執(zhí)行拋出異常,則不會(huì)清空緩存 | @CachEvict(value=”testcache”,beforeInvocation=true) |
@CacheEvict(value = "areaTreeData", allEntries = true, beforeInvocation = true)
public Integer save(SysArea sysArea) {
return mapper.insertSelective(sysArea);
}以上就是Springboot使用@Cacheable注解實(shí)現(xiàn)數(shù)據(jù)緩存的詳細(xì)內(nèi)容,更多關(guān)于Springboot數(shù)據(jù)緩存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解SpringBoot下文件上傳與下載的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot下文件上傳與下載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
詳解基于java的Socket聊天程序——服務(wù)端(附demo)
這篇文章主要介紹了詳解基于java的Socket聊天程序——服務(wù)端(附demo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
深度解析MyBatis?動(dòng)態(tài)?SQL?與緩存機(jī)制
本文從動(dòng)態(tài)SQL核心語(yǔ)法、緩存實(shí)現(xiàn)原理、性能優(yōu)化及面試高頻問(wèn)題四個(gè)維度,結(jié)合源碼與工程實(shí)踐,系統(tǒng)解析MyBatis的核心特性與最佳實(shí)踐,感興趣的朋友一起看看吧2025-06-06
基于SpringBoot?使用?Flink?收發(fā)Kafka消息的示例詳解
這篇文章主要介紹了基于SpringBoot?使用?Flink?收發(fā)Kafka消息,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
Spring框架的環(huán)境搭建和測(cè)試實(shí)現(xiàn)
這篇文章主要介紹了Spring框架的環(huán)境搭建和測(cè)試實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
spring boot與ktor整合的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于spring boot與ktor整合的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
idea +junit單元測(cè)試獲取不到bean注入的解決方式
這篇文章主要介紹了idea +junit單元測(cè)試獲取不到bean注入的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08

