Suche…


Warum zwischenspeichern?

Leistung ist heute eine der wichtigsten Kennzahlen, die wir beim Entwickeln eines Webservices / einer Anwendung auswerten müssen. Die Kundenbindung ist für jedes Produkt von entscheidender Bedeutung. Aus diesem Grund ist es äußerst wichtig, die Leistung zu verbessern und die Ladezeiten der Seiten zu reduzieren.

Wenn Sie einen Webserver ausführen, der mit einer Datenbank interagiert, können seine Vorgänge zu einem Engpass werden. MongoDB ist hier keine Ausnahme, und wenn unsere MongoDB-Datenbank größer wird, können sich die Dinge wirklich verlangsamen. Dieses Problem kann sich sogar verschlimmern, wenn der Datenbankserver vom Webserver getrennt wird. In solchen Systemen kann die Kommunikation mit der Datenbank einen großen Overhead verursachen.

Glücklicherweise können wir eine Methode namens Caching verwenden, um die Dinge zu beschleunigen. In diesem Beispiel werden wir diese Methode vorstellen und sehen, wie wir sie verwenden können, um die Leistung unserer Anwendung mithilfe von Spring Cache, Spring Data und Redis zu verbessern.

Das Basissystem

Als ersten Schritt erstellen wir einen grundlegenden Webserver, der Daten in MongoDB speichert. Für diese Demonstration nennen wir sie "schnelle Bibliothek". Der Server verfügt über zwei grundlegende Vorgänge:

POST /book : Dieser Endpunkt erhält den Titel, den Autor und den Inhalt des Buches und erstellt einen Bucheintrag in der Datenbank.

GET /book/ {title} : Dieser Endpunkt erhält einen Titel und gibt seinen Inhalt zurück. Wir gehen davon aus, dass Titel Bücher eindeutig identifizieren (daher gibt es nicht zwei Bücher mit demselben Titel). Eine bessere Alternative wäre natürlich die Verwendung einer ID. Der Einfachheit halber verwenden wir jedoch einfach den Titel.

Dies ist ein einfaches Bibliothekssystem, wir werden jedoch später erweiterte Funktionen hinzufügen.

Jetzt erstellen wir das Projekt mit Spring Tool Suite (mit Eclipse erstellen) und Spring Starter Project

Geben Sie hier die Bildbeschreibung ein

Wir bauen unser Projekt mit Java und für den Aufbau verwenden wir maven, wählen Sie Werte aus und klicken Sie auf Weiter

Geben Sie hier die Bildbeschreibung ein

Wählen Sie im Web-Modul MongoDB, Redis aus NOSQL und Web aus und klicken Sie auf Fertig stellen. Wir verwenden Lombok für die automatische Generierung von Setters und Get-Werten von Modellwerten. Daher müssen wir die Lombok-Abhängigkeit zum POM hinzufügen

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

MongoDbRedisCacheApplication.java enthält die Hauptmethode, mit der Spring Boot Application add ausgeführt wird

Erstellen Sie eine Modellklasse Book, die ID, Buchtitel, Autor, Beschreibung und Annotation mit @Data enthält, um automatische Setter und Getter aus dem Jar-Projekt lombok zu erstellen

package com.example;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import lombok.Data;
@Data
public class Book {
    @Id
    private String id;
    @Indexed
    private String title;
    private String author;
    private String description;
}

Spring Data erstellt alle grundlegenden CRUD-Operationen automatisch für uns. Erstellen wir also BookRepository.Java, das das Buch nach Titel findet und das Buch löscht

package com.example;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface BookRepository  extends MongoRepository<Book, String>
{
    Book findByTitle(String title);
    void delete(String title);
}

Erstellen Sie einen WebservicesController, der Daten in MongoDB speichert und Daten über idTitle (@PathVariable String title) abruft.

package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WebServicesController {
    @Autowired
    BookRepository repository;
    @Autowired
    MongoTemplate mongoTemplate;
    @RequestMapping(value = "/book", method = RequestMethod.POST)
    public Book saveBook(Book book) 
    {
        return repository.save(book);
    }
    @RequestMapping(value = "/book/{title}", method = RequestMethod.GET)
    public Book findBookByTitle(@PathVariable String title) 
    {
        Book insertedBook = repository.findByTitle(title);
        return insertedBook;
    }
}

Zwischenspeicher hinzufügen Bisher haben wir einen grundlegenden Bibliotheks-Webdienst erstellt, der aber überhaupt nicht erstaunlich schnell ist. In diesem Abschnitt versuchen wir, die findBookByTitle () -Methode zu optimieren, indem die Ergebnisse zwischengespeichert werden.

Um eine bessere Vorstellung davon zu bekommen, wie wir dieses Ziel erreichen, gehen wir zurück zum Beispiel der Menschen, die in einer traditionellen Bibliothek sitzen. Nehmen wir an, sie möchten das Buch mit einem bestimmten Titel finden. Zuerst schauen sie sich am Tisch um, ob sie ihn schon dorthin gebracht haben. Wenn ja, ist das großartig! Sie hatten gerade einen Cache-Treffer, der ein Element im Cache findet. Wenn sie es nicht gefunden haben, hatten sie einen Cache-Fehler, was bedeutet, dass sie das Element nicht im Cache gefunden haben. Im Falle eines fehlenden Artikels müssen sie in der Bibliothek nach dem Buch suchen. Wenn sie es finden, behalten sie es auf ihrem Tisch oder fügen es in den Cache ein.

In unserem Beispiel folgen wir genau demselben Algorithmus für die findBookByTitle () -Methode. Wenn Sie nach einem Buch mit einem bestimmten Titel gefragt werden, suchen wir es im Cache. Wenn nicht gefunden, suchen wir im Hauptspeicher nach unserer MongoDB-Datenbank.

Redis verwenden

Durch das Hinzufügen von Spring-Boot-Daten-Redis zu unserem Klassenpfad kann der Spring-Boot seine Magie vollbringen. Es erstellt alle erforderlichen Vorgänge durch automatische Konfiguration

Lassen Sie uns nun die Methode mit einer Zeile unter der Überschrift kommentieren, damit der Sprung booten kann

@Cacheable (value = "book", key = "#title")

Um aus dem Cache zu löschen, wenn ein Datensatz gelöscht wird, kommentieren Sie ihn einfach mit der unteren Zeile in BookRepository und überlassen Sie Spring Boot die Cache-Löschung für uns.

@CacheEvict (value = "book", key = "#title")

Um die Daten zu aktualisieren, müssen Sie der Methode eine Zeile unterhalb der Zeile hinzufügen und den Spring Boot-Handle zulassen

@CachePut(value = "book", key = "#title")

Den vollständigen Projektcode finden Sie bei GitHub



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow