Używam abstrakcji pamięci podręcznej sprężyny do buforowania obiektów w warstwie usługi. Jest to dobre rozwiązanie dla prostych operacji get/put, co następuje:Jak zwrócić liczbę wpisów za pomocą abstrakcji z pamięci podręcznej sprężyny
static private final String cacheName = "messages";
@CacheEvict(value=cacheName, key="#message.id")
public void deleteMessage(Message message) {
...
}
@Cacheable(value=cacheName, key="#id")
public Message findMessage(Long id) {
...
}
@CachePut(value=cacheName, key="#message.id")
public void saveMessage(Message message) {
...
}
@CachePut(value=cacheName, key="#message.id")
public Message updateMessage(Message message) {
...
}
Jednak to, co adnotacji Chciałbym skorzystać z następujących metod:
public long countAllMessages() {
...
}
Ponieważ wszystkie obiekty będą w pamięci podręcznej, powinien istnieć sposób na uzyskanie odpowiedzi z pamięci podręcznej i bez konieczności przechodzenia do warstwy repozytorium.
Również pamięć podręczna jest stosowana w następujący sposób:
@Cacheable(cacheName)
public List<Message> findAllMessages() {
...
}
mogłem zrobić metoda zliczania nazywają znaleźć wszystkie metody takie jak to:
public long countAllMessages() {
return findAllMessages().size();
}
Ale to nie byłby skuteczny w przypadku, gdy pamięć podręczna jest wyłączone, a rozmowa będzie następnie załadować wszystkie rekordy z db zamiast robić SELECT COUNT (*) ...
Jak mogę się upewnić, że po raz pierwszy wywoływana jest funkcja countAllMessages(), nie trafia ona do pamięci podręcznej? – Solubris
Zamiast wywoływać wersję countAllMessages(), należy wywołać metodę getTotalEhCacheSize() lub zamienić kod z getTotalEhCacheSize() na countAllMessages(). Jeśli potrzebujesz rzeczywistego liczenia z bazy danych (lub jakiegokolwiek zaplecza), potrzebujesz do tego specjalnej metody, którą możesz dodać do adnotacji @Cacheable (jeśli chcesz). Jeśli chcesz, aby odświeżył się w dowolnym momencie, usuń pamięć podręczną metod, gdy wywołasz inne metody aktualizacji lub wyodrębnij je ręcznie, na przykład za pomocą zadania działającego w tle. –