0 Tage Serie
java / intermediate
Snippet

Optimierung der Caffeine In-Memory-Cache-Bereinigung im Spring CacheManager

Die Cache-Abstraktion von Spring lässt sich mit Caffeine integrieren, um die Speicherauslastung bei hohen Durchsatzraten effizient zu steuern. Die Konfiguration von maximumSize aktiviert den W-TinyLFU-Eviction-Algorithmus, der den Heap-Verbrauch begrenzt und ein Überlaufen durch kontinuierliche Schlüsselerzeugung verhindert, während expireAfterWrite die Aktualität sicherstellt.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("productMetrics", "fxRates");
cacheManager.setCaffeine(Caffeine.newBuilder()
.initialCapacity(100)
.maximumSize(5_000)
.expireAfterWrite(15, TimeUnit.MINUTES)
.recordStats());
return cacheManager;
}
}
@Service
public class ProductService {
@Cacheable(value = "productMetrics", key = "#sku", unless = "#result == null")
public ProductMetrics fetchMetrics(String sku) {
return heavyComputationFromExternalApi(sku);
}
}
spring
Erklärung
1
cacheManager.setCaffeine(Caffeine.newBuilder()
Definiert die Caffeine-Builder-Spezifikationen, die für alle von diesem CacheManager verwalteten Caches gelten.
2
.maximumSize(5_000)
Setzt eine feste Obergrenze für die Anzahl zwischengespeicherter Einträge und stößt bei Vollbelegung die Bereinigung an.
3
@Cacheable(value = "productMetrics", key = "#sku", unless = "#result == null")
Verarbeitet Cache-Treffer/-Fehlzugriffe und verhindert durch SpEL-Filterung das Speichern von Null-Werten im Speicher.