簡體   English   中英

如何制作緩存取決於Spring應用程序啟動時的其他緩存

[英]How to make cache depends on other caches on startup of spring application

在我們的多模塊項目中,不同模塊中存在不同的緩存。 然后,我們在@PostConstruct的服務器啟動時填充所有這些緩存。 現在,某些緩存依賴於可能存在於不同模塊中的某些其他緩存。 因此,它要求在依賴於該緩存的緩存之前應填充一些緩存。 1.我們如何在春季做到這一點? 我可以利用任何設計模式嗎? 2.如果更新了緩存,我們如何將更新后的更改推廣到那些實時依賴更新緩存的緩存?

module 1---
    Cachce1

module 2--
    Cache2

module 3--
    Cache3

class Cache1 {
  private ConcurrentMap<> cache; 
  @PostConstruct() {
    cache = filleCache();
  }
}
class Cache2 {
  @Autowired
  private Cache1 cache1;
  private ConcurrentMap<> cache; 
  @PostConstruct() {
    cache = cache1;
  }
}
class Cache3 {
  @Autowired
  private Cache2 cache2;
  private ConcurrentMap<> cache; 
  @PostConstruct() {
    cache = cache2;
  }
}

依賴關系 :初始化順序通常由DI框架正確完成。 因此,在Cache1完全初始化之后,將運行Cache2后構造。 如果僅在CuncurrentMap緩存完整的數據集,則可以改用CuncurrentMap ,請參閱https://dzone.com/articles/need-micro-caching-memoization

避免緩存堆棧 有時,它更簡單,可以避免在中間層進行緩存。 一種簡單的方法是緩存數據輸入的位置(例如持久層),然后緩存數據輸出的位置(例如響應片段或完整響應)。 由於無論如何,完整的數據都緩存在最頂層的緩存中,因此中間緩存也可能不會獲得任何命中。

這在很大程度上取決於數據的種類以及在下一層使用的頻率。

我們如何傳播此更新的更改?

您有多種選擇。 如果module1知道其依賴性,則可以調用module2和3的重載。如果module1代碼不依賴於其客戶端,則使用事件偵聽器模式。 根據數據的來源,已經存在現有的機制。 查找Spring Data事件,數據庫的Change Data Capture功能,數據庫或持久層的觸發器。

您可以通過在緩存條目上使用有效期來簡化事情,並在一段時間后簡單地更新/重新加載數據。 但是,到期和緩存堆棧本身就是一個問題。 如果您使用5分鍾的固定期限,則有效期限將累加每一層。 因此,對於三層,數據可能會在5或15分鍾后刷新。 為了避免這種情況,我們通過緩存層傳播了一個到期時間和數據一起發生的時間點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM