知識庫 / Spring RSS 訂閱

設置緩存的生存時間值

Spring
HongKong
5
11:52 AM · Dec 06 ,2025

1. 概述

本教程將演示一些基本實際案例中的緩存配置。我們重點展示如何配置此緩存機制以具有時間限制。我們將這種時間限制稱為緩存的“過期時間”(TTL)。

2. Spring 緩存配置

此前,我們已經演示瞭如何使用 Spring 中的 @Cacheable 註解。 緩存的一個實用場景是,當酒店預訂網站的主頁頻繁打開時。 這意味着提供酒店列表的 REST 端點經常被請求,從而頻繁地向數據庫發出請求。 與從內存中提供數據相比,數據庫調用速度較慢。

首先,我們將創建 SpringCachingConfig

@Configuration
@EnableCaching
public class SpringCachingConfig {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("hotels");
    }
}

我們還需要使用 SpringCacheCustomizer

@Component
public class SpringCacheCustomizer implements CacheManagerCustomizer<ConcurrentMapCacheManager> {

    @Override
    public void customize(ConcurrentMapCacheManager cacheManager) {
        cacheManager.setCacheNames(asList("hotels"));
    }
}

3. @緩存 (Cacheable) 緩存

完成設置後,我們可以利用 Spring 配置。通過將 酒店 對象存儲在內存中,可以減少 REST 端點響應時間。我們使用 @Cacheable 註解來緩存 酒店 對象的列表,如代碼片段所示:

@Cacheable("hotels")
public List<Hotel> getAllHotels() {
    return hotelRepository.getAllHotels();
}

4. 設置 @Cacheable 的 TTL

然而,由於數據庫中的 Hotels 列表可能會隨着更新、刪除或新增操作而發生變化,因此我們希望通過設置時間到生間隔 (TTL) 來刷新緩存,在方法(見上文第 3 節)的首次調用時,現有緩存條目將被刪除並重新填充。

我們可以通過使用 @CacheEvict 註解來實現。例如,在下面的示例中,我們通過設置 caching.spring.hotelListTTL 變量來設置 TTL。

@CacheEvict(value = "hotels", allEntries = true)
@Scheduled(fixedRateString = "${caching.spring.hotelListTTL}")
public void emptyHotelsCache() {
    logger.info("emptying Hotels cache");
}

我們希望 TTL 設置為 12 小時。以毫秒為單位,其值為 12 x 3600 x 1000 = 43200000。我們將其定義在環境屬性中。此外,如果我們在基於屬性的環境配置中,則可以如下設置緩存 TTL:

caching.spring.hotelListTTL=43200000

當然,以下是翻譯後的內容:

或者,如果使用基於 YAML 的設計,我們可以將其設置為:

caching:
  spring:
    hotelListTTL: 43200000

5. 結論

在本文中,我們探討了如何為基於 Spring 的緩存設置 TTL 緩存。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.