java cache - ghdrako/doc_snipets GitHub Wiki
- https://blog.devops.dev/easy-to-use-caffeine-cache-1-3db5861f6f39
- https://github.com/ben-manes/caffeine/wiki
- https://www.baeldung.com/guava-cache
Wydajna implementacja cache.
Caffeine zapewnia kilka strategii (eviction policy):
- warianty bazującą na czasie, co widzieliśmy m. in. poprzez expireAfterWrite(),
- metody oparte o wielkość i częstotliwość trafień w cache,
- bazujące na referencjach (week reference),
- Pozwala na powiadomienia, gdy np. dany element zostanie z cache usunięty.
- Możliwe jest propagowanie zapisów do zapisów do zewnętrznych repozytoriów.
- Dostępny jest mechanizm zbierania statystyk.
- Pozwala na asynchroniczne odświeżanie cache poprzez refreshAfterWrite() ← tego nam brakuje w EhCache.
Strategię działania ustala się podczas tworzenia cache. Tu na przykład dla lib-iko-admin należałoby wskazać:
LoadingCache<Key, Val> graphs = Caffeine.newBuilder()
.maximumSize(10_000)
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(key -> createVal(key));
Here we should understand a difference between expireAfter and refreshAfter. When the expired entry is requested, an execution blocks until the new value would have been calculated by the build Function. But if the entry is eligible for the refreshing, then the cache would return an old value and asynchronously reload the value. https://www.baeldung.com/java-caching-caffeine#refreshing
Jest wolniejsza i nie jest tak zoptymalizowana jak implementacja Caffeine. Wykorzystuje mniej wydajne algorytmy.