Spring Cache – jak skonfigurować cache w springu

W kolejnej części kursu Spring Boota opowiadam o tym jak przyspieszać aplikację poprzez cache’owanie wywołań metod. Pokazuję jak skonfigurować Spring Cache. Omawiam także podstawowe adnotacje potrzebne do używania cache’a.

W filmie opowiadam po kolei, co to jest cache i dlaczego powinniśmy go stosować. Później omawiam konfigurację Spring cache, a także konfiguruje zewnętrznego providera cache’a, czyli Ehcache. Pokazuję także, jak to wszystko działa i jak odpowiednio skonfigurować wpisy dla cache w Ehcache.

W filmie omawiam użycie takich adnotacji jak: @Cachable, @CachePut i @CacheEvict, które w wygodny sposób pozwalają tworzyć i przeładowywać i usuwać cache.

 

W tej części znajdziesz:

  • Co to jest cache?
  • Jak działają metody bez cache?
  • Jak skonfigurować cache w Springu?
  • Jak cache’ować metody w Springu?
  • Jak działa adnotacja @Cachable?
  • Jak dział cache’owanie w Springu?
  • Providery cache dostępne w Springu
  • Konfiguracja Ehcache w aplikacji
  • Konfiguracja cache dla metod
  • Jak działa adnotacja @CachePut?
  • Czyszczenie cache w Springu
  • Jak działa adnotacja @CacheEvict?

 

Github projektu:
https://github.com/matdabrowski/SpringBootTutorialYoutube

 

Linki przydatne w tej części kursu:

Artykuł: Spring AOP – jak używać?

Dokumentacja cache w Spring Framework:
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache

Dokumentacja Cache Spring Boot:
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-caching

Dokumentacja Ehcache:
https://www.ehcache.org/documentation/3.8/

Dokumentacja konfiguracja xml w Ehcache:
https://www.ehcache.org/documentation/3.8/xml.html

 

Tutaj znajdziesz wszystkie odcinki kursu: Kurs Spring Boot

Mateusz Dąbrowski

Cześć jestem Mateusz, zajmuję się programowaniem już ponad 12 lat z czego ponad 8 programuję w Javie. Zapraszam Cię do lektury mojego bloga. Możesz przeczytać więcej o mnie >>TUTAJ<<

8 thoughts to “Spring Cache – jak skonfigurować cache w springu”

  1. Cześć, dzięki za fajny materiał.
    Wspomniałeś, że dla standardowego (generycznego) providera cache przechowywany jest w mapie, w pamięci.
    Czy w przypadku skorzystania z np. ehcache, standardowo dalej jest to przechowywane w pamięci?

    W jaki sposób można zdefiniować własny storage cache’a?

    1. Tak, dla Ehcache też jest to przechowywane w pamięci, aczkolwiek w Ehcache masz możliwość konfiguracji, czy chcesz to trzymać na Heap (domyślna opcja), czy chcesz to trzymać offheap. No i dodatkowo możesz też na dysku.

      Żeby zdefiniować własny storage, to tak naprawdę trzeba zrobić swojego providera, który implementuje standard JSR 107. W skrócie jest takie api javax.cache.cache-api (znajdziesz w meven repository) i trzeba je zaimplementować 😉
      Pytanie czego Ci brakuje w dostępnych implementacjach, że chcesz robić swój storage?

      1. Pisząc o storage miałem na myśli przechowywanie cache nie inMemory (pewnie niezalecane przy wielu zasobach) oraz nie na lokalnej maszynie (taki mikroserwis uruchomiony na dockerze musiałby mieć zapewne podmontowany własny storage dla poda) a na czymś pokroju Terracotta (jeśli dobrze zrozumiałem zastosowanie tego narzędzia).

        1. ok, jeśli potrzebujesz czegoś więcej w sensie osobnego serwisu, który zapewnia Ci cache, to jest już wiele dostępnych możliwości. Np. Możesz zacząć od Redisa. Redis się klastruje, więc możesz mieć klaster Redisa dostępny dla twoich microserwisów (czy nawet dla jednej aplikacji jak nie masz microserwisów). Możesz też w łatwy sposób odpalić go na dockerze (nie trzeba prawie nic konfigórować w Redisie). I to w większości przypadków na początek wystarczy.

          Jeśli potrzebujesz czegoś innego, to możesz skorzystać z innych dostępnych opcji np. Hazelcast, Infinispan, czy też Terracota.

          Myślę, że nie ma potrzeby pisać swojego providera, chyba że rozważasz tu aspekt edukacyjny (co może być oczywiście ciekawy zagadnieniem i warto się pobawić – wcześniej myślałem, że właśnie o to Ci chodzi 😉).

  2. Cześć, pytanie od początkującego : czy to rozwiązanie sprawdzi się przy problemach z bazą danych podczas pobierania plików APK (ok 30 Mb) przez wielu użytkowników naraz? Jak przy starszym kodzie bez Hibernate mogę sprawdzić np. za pomocą logów czy cache się załadował/ zaktualizował / nie rośnie nadmiernie? Jakich problemów należy się spodziewać, albo na co zwrócić uwagę? Pozdrawiam 🙂

    1. Problemy z bazą przy pobieraniu plików? Trzymasz te pliki w bazie danych? Czy to rozwiązanie pomoże w twoim problemie, tego nie wiem. Nie znam twojego przypadku, opisałaś to bardzo ogólnikowo i ciężko jest cokolwiek tutaj napisać.

      Generalnie taki cache pomaga jeśli masz zbyt dużo zapytań do bazy danych i baza się nie wyrabia. Cachując pewne rzeczy sprawiasz, że jest mniej zapytań do bazy danych. Jeśli u ciebie problemem jest ilość zapytań do bazy danych, to warto użyć cache.

      Ale zacząłbym od zrobienia dogłębnej analizy, co tak naprawdę jest problemem.

      1. Dzięki za konkretną odpowiedź 🙂 No cóż… ja mam tylko szczątkowe informacje, że baza nie daje rady obsłużyć tylu zapytań na raz i trzeba to poprawić 🙂 W internecie głównym rozwiązaniem takiego problemu jest chmura (nie wchodzi w grę) albo cache, tak że trochę na ślepo będę to wszystko robić i mam nadzieję, że dla odmiany nie wysypie się teraz aplikacja.

        1. Zacząłbym od zdobycia większej ilości informacji, bo optymalizowanie czegokolwiek mając szczątkowe informacje, jest bez sensu. Więcej popsujesz, niż naprawisz. Popytaj kogoś, kto wie cokolwiek o tej aplikacji, z czym jest problem.

          Nie wiem jakiej bazy używasz, ale zwykle czy to w bazie, czy to w aplikacji można wylogować zapytania. Jeśli używasz Hibernate i Springa to do wylogowania zapytań służy properties show_sql (w zależności, czy używasz Spring, Spring Boota, czy czystego Hibernate’a poszukaj w google jak ustawić logowanie zapytań sql). Nie rób tego na produkcji, tylko np. lokalnie.

          Dopiero jak będzie widzieć, których zapytań jest za dużo, to możesz zacząć coś optymalizować. Najczęstszy problem z Hibernate to n + 1 zapytań. Tu masz link. Sprawdź, czy nie ma z tym problemu. Później możesz zacząć używać cache, jak już będziesz wiedziała, które miejsca sprawiają problemy.

Komentarze są zamknięte.