SpringCache輕松啟用Redis緩存的全過程
1.前言
Spring Cache是Spring提供的一種緩存抽象機(jī)制,旨在通過簡化緩存操作來提高系統(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表達(dá)式來獲取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注解,通過使用不同的屬性進(jìn)行相應(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

