logotype
  • Startseite
  • Blog
  • Leistungen
    • Engineering
    • Services
    • Infrastruktur
    • Individuelle Software
  • Lösungen
  • Unternehmen
    • Technologie
    • Über uns
    • Kontakt
    • Karriere / Jobs
logotype
  • Startseite
  • Blog
  • Leistungen
    • Engineering
    • Services
    • Infrastruktur
    • Individuelle Software
  • Lösungen
  • Unternehmen
    • Technologie
    • Über uns
    • Kontakt
    • Karriere / Jobs
logotype
  • Startseite
  • Blog
  • Leistungen
    • Engineering
    • Services
    • Infrastruktur
    • Individuelle Software
  • Lösungen
  • Unternehmen
    • Technologie
    • Über uns
    • Kontakt
    • Karriere / Jobs
  • Startseite
  • Blog
  • Leistungen
    • Engineering
    • Services
    • Infrastruktur
    • Individuelle Software
  • Lösungen
  • Unternehmen
    • Technologie
    • Über uns
    • Kontakt
    • Karriere / Jobs
logotype
logotype
  • Startseite
  • Blog
  • Leistungen
    • Engineering
    • Services
    • Infrastruktur
    • Individuelle Software
  • Lösungen
  • Unternehmen
    • Technologie
    • Über uns
    • Kontakt
    • Karriere / Jobs
Blog Post

Spring Cache und Apache Ignite

admin 06.03.2025

Spring Cache (https://docs.spring.io/spring-boot/reference/io/caching.html) ist eine Abstraktionsschicht um Caches in Anwendungen transparent zu ergänzen. Mit Spring Cache können Caches über Annotationen in Spring Managed Beans errgänzt werden, um z.B. die Ausführungszeit von Methoden zu reduzieren. Die Methoden werden nur einmalig ausgeführt, der Rückgabewert der Methode wird dann im Cache abgelegt. Bei erneutem Aufruf der Methode wird das Ergebnis aus dem Cache geholt.

Für die Caching-Implementierung stehen verschiedene Caching-Provider zur Verfügung (https://docs.spring.io/spring-boot/reference/io/caching.html#io.caching.provider.). Wir setzen Apache Ignite (https://ignite.apache.org/) ein. Apache Ignite ist eine verteilte Datenbank, die in-Memory betrieben werden kann und u.a. einen Key/Value Store bietet. Dabei unterstützt es auch verteilte ACID-Transaktionen (https://ignite.apache.org/use-cases/in-memory-cache.html) und einen Cluster Betrieb. 

In Kombination verwenden wir Spring Cache und Ignite um häufige Datenbankabfragen auf Daten zu beschleunigen, die sich nur selten ändern.

Die Datenbankabfragen erfolgen bei uns in einem „@Repository“ welches die eigentliche Datenbankabfrage über JPA/Hibernate ausführt. Dieser Aufruf wird nochmal in einer Methode in einem „@Service“ gekapselt. Die Methode im Service ist dann mit @Cacheable annotiert.

Die Argumente der Methode werden als Caching-Key verwendet. Bei der ersten Abarbeitung der Service-Methode wird die Datenbankabfrage durchgeführt und das Ergebnis im Ignite Cache gespeichert. Für zukünftige Aufrufe der Service-Methode mit denselben Argumenten wird das Caching-Resultat zurückgeliefert. Für den Aufrufer der Service Methode ist der Cache transparent.

Zu beachten ist hierbei nur, daß der Cache aktualisiert werden muss, wenn Daten in der Datenbank geändert werden. Wir verwenden Hibernate und registrieren entsprechende Eventlistener, so daß bei Update bzw. Delete Events der Cache entsprechend aktualisiert bzw. geleert wird. Da wir das Caching nur bei Datensätzen verwenden, die sich selten ändern, erfolgen Cache Aktualisierungen hier auch nur relativ selten.

Über die Ignite Konfiguration lassen sich auch eigene “Expiry Policies” hinterlegen, über die festgelegt werden kann, wie lange Daten im Cache verweilen sollen.

Ein konkretes Anwendungsbeispiel: Wir haben in einem unserer Systeme mehrere Tausend Matrizen hinterlegt, die Restwertprozentsätze zu Laufzeit/Laufleistungskombinationen enthalten. Diese werden dann bei Leasingraten Kalkulationen verwendet. Diese Daten ändern sich nur selten, werden aber im Rahmen von Leasingraten Kalkulationen häufig verwendet. Die Kalkulation konnte durch den Cache massiv beschleunigt werden, es musste aber kein „Kalkulationscode“ verändert oder angepasst werden, da der Cache für die Kalkulation „unsichtbar“ ist. Nur die Methode, womit die Matrizen geladen werden wurde mit @Cacheable annotiert.

Warum Elasticsearch?

19.02.2025

Records in Java (JEP 395)

19.03.2025

Related Posts

admin 0 Comments

KI-Modelle: Temperatur erklärt

READ MORE
Andreas Germeroth 0 Comments

Identity und Access Management (IAM)

READ MORE
logotype
  • +49 89 3090897-0
  • +49 89 3090897-99
  • info@siteos.de
  • Kapellenweg 6, 81371 München

 

Impressum

Datenschutz

Datenschutz Bewerber

© Copyright 2025 SiteOS AG. All rights reserved.

Whatsapp Xing Instagram Facebook Linkedin