Cześć!
Czy ktoś ma pomysł jak pozbyć adnotacji do cachowania w Springu, podobnie tak jak z @Transactional w tej prezentacji ?
Nie wiem co tam spring czaruje z cachem, ale ostatnio używałem do prostego cachowania jednej małej rzeczy takiej libki: https://github.com/ben-manes/caffeine
W Vavr.io
masz dwa gotowe rozwiązania.
Lazy
-> do prostych wartości
FunctionX.memoized()
- do dowolnych funkcji. Pewnie chodzi Ci o to drugie.
Przedstaw metodę jako Function2,3 czy co tam potrzebujesz, a potem tylko odpal .memoized()
@jarekr000000: Twoje rozwiązanie może co najwyżej zastąpić adnotację @Cacheable
, często przydaje się również @CacheEvict
Jeżeli więć chcemy mieć cache, który się odświeża po zapisie napisałbym dekorator dla danej klasy. Przykładowo:
@Value
public class Settings{
private final Long id;
}
public interface Repository<T, ID>{
ID save(T settings);
T find(ID id);
}
public class SettingsRepository implements Repository<Settings, Long>{
@Override
public Long save(Settings settings) {
//bla bla bla
return settings.getId();
}
@Override
public Settings find(Long id) {
//bla bla bla
return null;
}
}
public class CachingRepository<T, ID> implements Repository<T, ID>{
private final Repository<T, ID> repository;
private final ConcurrentHashMap<ID, T> cache = new ConcurrentHashMap<>();
public CachingRepository( Repository<T, ID> repository) {
this.repository = repository;
}
@Override
public ID save(T t) {
ID saved = repository.save(t);
cache.remove(saved);
return saved;
}
@Override
public T find(ID id) {
return cache.computeIfAbsent(id, repository::find)
}
}
Repository repo = new CachingRepository<>(new SettingsRepository());
//jedziemy z koksem tryliard requestów / sekundę
Oczywiście to trywialny przykład na produkcji należałoby się upewnić, że repozytorium ma pojedynczą instancję, zbadać czy nie lepszy będzie jakiś caffeine, off heap etc.
@CacheEvict to zło, ogólnie cache czyszczony manualnie to proszenie się o problemy. No właśnie, co robi @Cacheable by default w Springu panowie inżynierowie? :) raz nam przez to wywaliło usługę na produkcji.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.