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@EnableCachingpublic class CacheConfig {@Beanpublic CacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager("productMetrics", "fxRates");cacheManager.setCaffeine(Caffeine.newBuilder().initialCapacity(100).maximumSize(5_000).expireAfterWrite(15, TimeUnit.MINUTES).recordStats());return cacheManager;}}@Servicepublic 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.