Spring Cache

LL。。。發表於2024-10-30

1.介紹

Spring Cache是Spring提供的一個快取框架,基於AOP原理,實現了基於註解的快取功能,只需要簡單地加一個註解就能實現快取功能,對業務程式碼的侵入性很小。

1.常用註解

@EnableCaching:開啟快取註解功能
@Cacheable:查詢資料時快取,將方法的返回值進行快取。
@CacheEvict:用於刪除快取,將一條或多條資料從快取中刪除。
@CachePut:用於更新快取,將方法的返回值放到快取中
@Caching:組合多個快取註解;
@CacheConfig:統一配置
@Cacheable中的value值

2.基本使用

1.匯入jar包

基於SpringBoot使用Spring Cache非常簡單,首先加入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>2.7.10</version>
</dependency>

2.查詢資料時快取

下邊使用Cacheable註解實現查詢服務資訊時對服務資訊進行快取,它的執行流程是:第一次查詢服務資訊快取中沒有該服務的資訊此時去查詢資料庫,查詢資料庫拿到服務資訊並進行快取,第二次再去查詢該服務資訊發現快取中有該服務的資訊則直接查詢快取不再去資料庫查詢。


新增@EnableCaching:開啟快取註解功能

/**
 * 查詢區域服務資訊並進行快取
 * @param id 對應serve表的主鍵
 * @return 區域服務資訊
 */
Serve queryServeByIdCache(Long id);
@Override
public Serve queryServeByIdCache(Long id) {
    return getById(id);
}

Cacheable註解配置的兩項引數說明:

value:快取的名稱,快取名稱作為快取key的字首。

key: 快取key,支援SpEL表示式,上述程式碼表示取引數id的值作為key

最終快取key為:快取名稱+“::”+key,例如:上述程式碼id為123,最終的key為:JZ_CACHE:SERVE_RECORD::123

SpEL(Spring Expression Language)是一種在 Spring 框架中用於處理字串表示式的強大工具,它可以實現獲取物件的屬性,呼叫物件的方法操作。

keyGenerator:指定一個自定義的鍵生成器(實現 org.springframework.cache.interceptor.KeyGenerator 介面的類),用於生成快取的鍵。與 key 屬性互斥,二者只能選其一。

3.測試

package com.jzo2o.foundations.service;

import com.jzo2o.common.model.PageResult;
import com.jzo2o.foundations.model.domain.Serve;
import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.response.*;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.Assert;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

@SpringBootTest
@Slf4j
class IServeServiceTest {

//區域服務查詢
@Test
public void test_queryServeByIdCache(){
    Serve serve = serveService.queryServeByIdCache(1693815623867506689L);
    Assert.notNull(serve,"服務為空");
}

4.結果

快取key:JZ_CACHE:SERVE_RECORD::1693815623867506689

快取value:serve表的記錄

快取過期時間:-1,表示永不過期

仔細核實內容是否符合我們的預期結果。

在@Cacheable註解中有一個屬性為cacheManager,表示快取管理器,透過快取管理器可以設定快取過期時間。

相關文章