Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Praktische Verwendung von Hashes | Caching mit Redis und Spring Boot
Einführung in Redis

bookPraktische Verwendung von Hashes

Wir werden unsere Anwendung vollständig zusammenstellen und sie mit Redis und Spring Boot testen. Caching wird die Bearbeitung von Anfragen erheblich beschleunigen und die Last auf die Datenbank reduzieren.

Kurze Zusammenfassung aus dem Video

In unserem Programm haben wir die folgende Logik verwendet: Wenn ein Benutzer zur Haupt-Datenbank hinzugefügt wird, werden seine Daten nicht gecached, da dies zu diesem Zeitpunkt noch nicht erforderlich ist.

@Transactional
public User createUser(User user) {
    return userRepository.save(user);
}

Die Methode createUser speichert den Benutzer einfach in der Datenbank.

Wenn eine Anfrage zum Abrufen der Benutzerdaten per ID eingeht, wird zunächst geprüft, ob die Informationen im Redis-Cache verfügbar sind. Dies hilft, unnötige Datenbankabfragen zu vermeiden, wenn die Daten bereits zwischengespeichert sind.

@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
    Thread.sleep(100);
    return userRepository.findById(id).orElseThrow(
            () -> new RuntimeException(String.format("User with this id: %d not found", id))
    );
}

Mit der Annotation @Cacheable werden die Daten unter dem Schlüssel user-cache zwischengespeichert, wobei der Wert der ID einbezogen wird (user-cache:20 für einen Benutzer mit der ID 20). Befinden sich die Daten im Cache, werden sie abgerufen und zurückgegeben. Sind die Daten nicht im Cache, fragt die Methode die Datenbank ab.

Beim Löschen von Daten aus der Datenbank ist es wichtig, diese auch aus dem Cache zu entfernen, um die Konsistenz der Daten sicherzustellen und die Verwendung veralteter Informationen zu vermeiden.

@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

Die Methode deleteUser löscht den Benutzer aus der Datenbank und entfernt dessen Daten aus dem Redis-Cache, um die Verwendung von veralteten Informationen bei zukünftigen Abfragen zu verhindern.

Vorteile des Cachings

Nun zum spannenden Teil — warum haben wir Caching implementiert? Nach dem Hinzufügen des Redis-Caches wurden Anfragen deutlich schneller — tatsächlich bis zu 20-mal schneller! Dies wird in den untenstehenden Screenshots deutlich gezeigt.

Vor dem Caching

Vor der Implementierung von Caching ging jede Anfrage direkt an die Datenbank, was zu erheblichen Verzögerungen bei der Verarbeitung führte.

Nach dem Caching

Mit aktiviertem Caching werden die meisten Anfragen nun von Redis verarbeitet, was die Antwortzeiten erheblich reduziert.

Zusammenfassung

Caching mit Redis ermöglicht eine Optimierung der Anwendungsleistung, eine Beschleunigung der Anfrageverarbeitung und eine Reduzierung der Datenbankbelastung. Dieser Ansatz ist besonders vorteilhaft für Anwendungen mit hohem Datenverkehr, bei denen die Geschwindigkeit der Anfrageverarbeitung entscheidend ist.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.33

bookPraktische Verwendung von Hashes

Swipe um das Menü anzuzeigen

Wir werden unsere Anwendung vollständig zusammenstellen und sie mit Redis und Spring Boot testen. Caching wird die Bearbeitung von Anfragen erheblich beschleunigen und die Last auf die Datenbank reduzieren.

Kurze Zusammenfassung aus dem Video

In unserem Programm haben wir die folgende Logik verwendet: Wenn ein Benutzer zur Haupt-Datenbank hinzugefügt wird, werden seine Daten nicht gecached, da dies zu diesem Zeitpunkt noch nicht erforderlich ist.

@Transactional
public User createUser(User user) {
    return userRepository.save(user);
}

Die Methode createUser speichert den Benutzer einfach in der Datenbank.

Wenn eine Anfrage zum Abrufen der Benutzerdaten per ID eingeht, wird zunächst geprüft, ob die Informationen im Redis-Cache verfügbar sind. Dies hilft, unnötige Datenbankabfragen zu vermeiden, wenn die Daten bereits zwischengespeichert sind.

@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
    Thread.sleep(100);
    return userRepository.findById(id).orElseThrow(
            () -> new RuntimeException(String.format("User with this id: %d not found", id))
    );
}

Mit der Annotation @Cacheable werden die Daten unter dem Schlüssel user-cache zwischengespeichert, wobei der Wert der ID einbezogen wird (user-cache:20 für einen Benutzer mit der ID 20). Befinden sich die Daten im Cache, werden sie abgerufen und zurückgegeben. Sind die Daten nicht im Cache, fragt die Methode die Datenbank ab.

Beim Löschen von Daten aus der Datenbank ist es wichtig, diese auch aus dem Cache zu entfernen, um die Konsistenz der Daten sicherzustellen und die Verwendung veralteter Informationen zu vermeiden.

@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

Die Methode deleteUser löscht den Benutzer aus der Datenbank und entfernt dessen Daten aus dem Redis-Cache, um die Verwendung von veralteten Informationen bei zukünftigen Abfragen zu verhindern.

Vorteile des Cachings

Nun zum spannenden Teil — warum haben wir Caching implementiert? Nach dem Hinzufügen des Redis-Caches wurden Anfragen deutlich schneller — tatsächlich bis zu 20-mal schneller! Dies wird in den untenstehenden Screenshots deutlich gezeigt.

Vor dem Caching

Vor der Implementierung von Caching ging jede Anfrage direkt an die Datenbank, was zu erheblichen Verzögerungen bei der Verarbeitung führte.

Nach dem Caching

Mit aktiviertem Caching werden die meisten Anfragen nun von Redis verarbeitet, was die Antwortzeiten erheblich reduziert.

Zusammenfassung

Caching mit Redis ermöglicht eine Optimierung der Anwendungsleistung, eine Beschleunigung der Anfrageverarbeitung und eine Reduzierung der Datenbankbelastung. Dieser Ansatz ist besonders vorteilhaft für Anwendungen mit hohem Datenverkehr, bei denen die Geschwindigkeit der Anfrageverarbeitung entscheidend ist.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 4
some-alt