SpringCache輕松啟用Redis緩存的全過程
1.前言
Spring Cache
是Spring提供的一種緩存抽象機制,旨在通過簡化緩存操作來提高系統(tǒng)性能和響應(yīng)速度。Spring Cache
可以將方法的返回值緩存起來,當(dāng)下次調(diào)用方法時如果從緩存中查詢到了數(shù)據(jù),可以直接從緩存中獲取結(jié)果,而無需再次執(zhí)行方法體中的代碼。
2.常用注解
- @Cacheable:在方法執(zhí)行前查看是否有緩存對應(yīng)的數(shù)據(jù),如果有直接返回數(shù)據(jù),如果沒有調(diào)用方法獲取數(shù)據(jù)返回,并緩存起來;
- @CacheEvict:將一條或多條數(shù)據(jù)從緩存中刪除;
- @CachePut:將方法的返回值放到緩存中;
- @EnableCaching:開啟緩存注解功能;
- @Caching:組合多個緩存注解。
3.啟用緩存
3.1.配置yaml文件
spring: cache: type: simple simple: time-to-live: 600s
3.2.添加注解
在啟動類上添加注解@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屬性可指定緩存的名稱,key屬性則可指定緩存的鍵,可使用SpEL表達式來獲取key的值。
這里result表示方法的返回值UserInfo,從UserInfo中獲取id屬性。
@CachePut(value = "user", key = "#result.id") public UserInfo create(UserCreateRequest request) { // 將請求中的數(shù)據(jù)映射給實體類(相關(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) { // 將請求中的數(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.查詢緩存
使用
@Cacheable
注解。在方法執(zhí)行前,首先會查詢緩存,如果緩存不存在,則根據(jù)方法的返回結(jié)果創(chuàng)建緩存;如果緩存存在,則直接返回數(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í)行完后,會根據(jù)key刪除對應(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
注解,通過使用不同的屬性進行相應(yīng)操作。
創(chuàng)建/更新多個緩存:
@Caching( put = { @CachePut(value = "userById", key = "#result.id"), @CachePut(value = "userByPhone", key = "#request.phone") } )
刪除多個緩存:
@Caching( evict = { @CacheEvict(value = "userById", key = "#result.id"), @CacheEvict(value = "userByPhone", key = "#request.phone") } )
到此這篇關(guān)于SpringCache輕松啟用Redis緩存的全過程的文章就介紹到這了,更多相關(guān)SpringCache啟用Redis緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合H2數(shù)據(jù)庫的操作方法
H2是一個Java語言編寫的嵌入式數(shù)據(jù)庫,它不受平臺的限制,同時H2提供了一個十分方便的web控制臺,用于操作和管理數(shù)據(jù)庫內(nèi)容,本文介紹SpringBoot整合H2數(shù)據(jù)庫的方法,感興趣的朋友一起看看吧2024-01-01