SpringCache輕松啟用Redis緩存的全過(guò)程
1.前言
Spring Cache
是Spring提供的一種緩存抽象機(jī)制,旨在通過(guò)簡(jiǎn)化緩存操作來(lái)提高系統(tǒng)性能和響應(yīng)速度。Spring Cache
可以將方法的返回值緩存起來(lái),當(dāng)下次調(diào)用方法時(shí)如果從緩存中查詢(xún)到了數(shù)據(jù),可以直接從緩存中獲取結(jié)果,而無(wú)需再次執(zhí)行方法體中的代碼。
2.常用注解
- @Cacheable:在方法執(zhí)行前查看是否有緩存對(duì)應(yīng)的數(shù)據(jù),如果有直接返回?cái)?shù)據(jù),如果沒(méi)有調(diào)用方法獲取數(shù)據(jù)返回,并緩存起來(lái);
- @CacheEvict:將一條或多條數(shù)據(jù)從緩存中刪除;
- @CachePut:將方法的返回值放到緩存中;
- @EnableCaching:開(kāi)啟緩存注解功能;
- @Caching:組合多個(gè)緩存注解。
3.啟用緩存
3.1.配置yaml文件
spring: cache: type: simple simple: time-to-live: 600s
3.2.添加注解
在啟動(dòng)類(lèi)上添加注解@EnableCaching
:
@Slf4j @SpringBootApplication @EnableCaching public class SpringBootstrap { public static void main(String[] args) { SpringApplication.run(SpringBootstrap.class, args); } }
3.3.創(chuàng)建緩存
使用@CachePut注解。當(dāng)方法執(zhí)行完后,如果緩存不存在則創(chuàng)建緩存;如果緩存存在則更新緩存。
注解中的value屬性可指定緩存的名稱(chēng),key屬性則可指定緩存的鍵,可使用SpEL表達(dá)式來(lái)獲取key的值。
這里result表示方法的返回值UserInfo,從UserInfo中獲取id屬性。
@CachePut(value = "user", key = "#result.id") public UserInfo create(UserCreateRequest request) { // 將請(qǐng)求中的數(shù)據(jù)映射給實(shí)體類(lèi)(相關(guān)方法自行創(chuàng)建) User user = UserConverter.createByRequest(request); boolean save = userService.save(user); if (save) { return UserConverter.toInfo(user); } else { throw new RuntimeException("User.create.fail"); } }
3.4.更新緩存
同樣使用
@CachePut
注解。當(dāng)方法執(zhí)行完后,如果緩存不存在則創(chuàng)建緩存;如果緩存存在則更新緩存。
@CachePut(value = "user", key = "#result.id") public UserInfo update(UserUpdateRequest request) { // 將請(qǐng)求中的數(shù)據(jù)映映射給wrapper(相關(guān)方法自行創(chuàng)建) Wrapper<User> wrapper = UserConverter.updateWrapperByRequest(request); boolean update = userService.update(wrapper); if (update) { return UserConverter.toInfo(user); } else { throw new RuntimeException("User.update.fail"); } }
3.5.查詢(xún)緩存
使用
@Cacheable
注解。在方法執(zhí)行前,首先會(huì)查詢(xún)緩存,如果緩存不存在,則根據(jù)方法的返回結(jié)果創(chuàng)建緩存;如果緩存存在,則直接返回?cái)?shù)據(jù),不執(zhí)行方法。這里使用request表示方法的參數(shù)UserQueryRequest。
@Cacheable(value = "user", key = "#request.id") public UserInfo query(UserQueryRequest request) { User user = userService.getById(request.getId()); if (Objects.isNull(user)) { throw new RuntimeException("User.not.exist"); } return c2cInterestCategory; }
3.6.刪除緩存
使用
@CacheEvict
注解。當(dāng)方法執(zhí)行完后,會(huì)根據(jù)key刪除對(duì)應(yīng)的緩存。這里可以使用condition屬性,當(dāng)返回結(jié)果為true(刪除成功)后,才去刪除緩存。
@CacheEvict(value = "user", key = "#request.id", condition = "#result.equals(true)") public Boolean delete(UserDeleteRequest request) { return userService.removeById(request.getId()); }
3.7.多重操作
使用
@Caching
注解,通過(guò)使用不同的屬性進(jìn)行相應(yīng)操作。
創(chuàng)建/更新多個(gè)緩存:
@Caching( put = { @CachePut(value = "userById", key = "#result.id"), @CachePut(value = "userByPhone", key = "#request.phone") } )
刪除多個(gè)緩存:
@Caching( evict = { @CacheEvict(value = "userById", key = "#result.id"), @CacheEvict(value = "userByPhone", key = "#request.phone") } )
到此這篇關(guān)于SpringCache輕松啟用Redis緩存的全過(guò)程的文章就介紹到這了,更多相關(guān)SpringCache啟用Redis緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java必會(huì)的Synchronized底層原理剖析
synchronized作為Java程序員最常用同步工具,很多人卻對(duì)它的用法和實(shí)現(xiàn)原理一知半解,以至于還有不少人認(rèn)為synchronized是重量級(jí)鎖,性能較差,盡量少用。但不可否認(rèn)的是synchronized依然是并發(fā)首選工具,本文就來(lái)詳細(xì)講講2022-10-10SpringBoot啟動(dòng)參數(shù)的實(shí)現(xiàn)
SpringBoot通過(guò)jar文件方式啟動(dòng),配置可以通過(guò)啟動(dòng)參數(shù)進(jìn)行覆蓋,本文就來(lái)介紹一下SpringBoot啟動(dòng)參數(shù)的實(shí)現(xiàn),感興趣的可以了解一下2025-01-01SpringBoot整合H2數(shù)據(jù)庫(kù)的操作方法
H2是一個(gè)Java語(yǔ)言編寫(xiě)的嵌入式數(shù)據(jù)庫(kù),它不受平臺(tái)的限制,同時(shí)H2提供了一個(gè)十分方便的web控制臺(tái),用于操作和管理數(shù)據(jù)庫(kù)內(nèi)容,本文介紹SpringBoot整合H2數(shù)據(jù)庫(kù)的方法,感興趣的朋友一起看看吧2024-01-01