Spring Boot 4-mikrotjenester og REST-API'er · Lektion

Cachingstrategier til mikrotjenester

Udforsk og implementér cachingmekanismer som Redis for at forbedre mikrotjenesternes ydeevne.

Lektion 5 af 912 trin

Cachingstrategier til mikrotjenester er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 5 af 9. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 9 lektioner i alt.

Hvorfor bruge cachelagring?

Forestil dig, at din mikrotjeneste ofte henter de samme data fra en database eller en anden langsom tjeneste. Hver forespørgsel betyder ventetid, ressourceforbrug og langsommere behandling.

  • Bedre ydeevne: Cachelagring gemmer data, der tilgås ofte, tættere på din applikation.
  • Mindre belastning: Mindre pres på databaser og eksterne tjenester.
  • Hurtigere svar: Brugerne oplever hurtigere interaktioner.

Cachelagring er en effektiv teknik til optimering af mikrotjenesters ydeevne.

Forstå det grundlæggende om cacher

En cache er et midlertidigt lager, der indeholder kopier af data. Når din applikation har brug for data, tjekker den først cachen.

  • Cache-træf: Dataene findes i cachen og hentes hurtigt.
  • Cache-mis: Dataene findes ikke i cachen, så de hentes fra den oprindelige kilde, f.eks. en database, og gemmes derefter i cachen til senere brug.

Tænk på det som at kunne huske et telefonnummer, du ofte ringer til.

Cache i hukommelsen kontra distribueret cache

Der findes to hovedtyper af cacher:

  • Cache i hukommelsen: Gemmes direkte i én enkelt applikationsinstans. Den er hurtig, men data går tabt, hvis instansen genstarter, og deles ikke mellem flere mikrotjenesteinstanser.
  • Distribueret cache: En separat tjeneste, f.eks. Redis, som flere mikrotjenesteinstanser kan oprette forbindelse til. Data deles og bevares på tværs af instanser, hvilket er afgørende for skalerbare mikrotjenester.

Til mikrotjenester foretrækkes distribueret cache normalt.

Introduktion til Redis til cachelagring

Redis (Remote Dictionary Server) er et populært open source-datalager i hukommelsen. Det bruges ofte som distribueret cache på grund af sin hastighed og alsidighed.

  • Nøgle-værdi-lager: Gemmer data som simple nøgle-værdi-par.
  • Ekstremt hurtigt: Operationer udføres meget hurtigt, ofte på mikrosekunder.
  • Alsidigt: Understøtter forskellige datastrukturer som strenge, hash-tabeller, lister, mængder og meget mere.

Det er et fremragende valg til delt cachelagring i en mikrotjenestearkitektur.

Opsætning af Spring Boot og Redis

Hvis du vil integrere Redis med Spring Boot, skal du bruge afhængigheden spring-boot-starter-data-redis.

Føj den til din pom.xml (Maven) eller build.gradle (Gradle):

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Boot konfigurerer automatisk Redis, hvis den finder en kørende instans, f.eks. via Docker, eller forbindelsesegenskaber i application.properties.

S‌prings cachemagi

Spring Boot tilbyder et effektivt lag til cacheabstraktion. Det betyder, at du kan føje cachelagring til din applikation med simple annoteringer uden at interagere direkte med Redis-kode.

Hvis du vil aktivere cachelagring i din Spring Boot-applikation, skal du blot føje annoteringen @EnableCaching til din hovedklasse:

@SpringBootApplication
@EnableCaching
public class MyServiceApplication { ... }

Det fortæller Spring, at den skal lede efter cacheannoteringer på dine metoder.

Læsning fra cache: @Cacheable

Annoteringen @Cacheable bruges på metoder, hvis resultater du vil cachelagre. Når en metode med annoteringen @Cacheable kaldes:

  • Kontrollerer Spring, om resultatet for de angivne argumenter allerede findes i cachen.
  • Hvis det findes, returneres den cachelagrede værdi (cache-træf).
  • Hvis det ikke findes, udføres metoden, resultatet gemmes i cachen og returneres derefter (cache-mis).

Angiv en value (cachenavn) og eventuelt et key-udtryk.

Live-demo: Cachelagringskoncept

Dette simple Java-program demonstrerer den grundlæggende idé bag cachelagring. Bemærk, hvordan antallet af kald til 'databasen' kun stiger for nye ID'er, mens gentagne kald henter data øjeblikkeligt fra 'cachen'.

import java.util.HashMap;
import java.util.Map;

// A simple in-memory cache
class SimpleProductCache {
    private Map<String, String> cache = new HashMap<>();

    public String get(String key) {
        return cache.get(key);
    }

    public void put(String key, String value) {
        cache.put(key, value);
    }

    public void remove(String key) {
        cache.remove(key);
    }
}

class ProductFetcher {
    private SimpleProductCache productCache;
    private int dbCallCount = 0;

    public ProductFetcher(SimpleProductCache cache) {
        this.productCache = cache;
    }

    public String fetchProductName(String productId) {
        // Try to get from cache first
        String cachedName = productCache.get(productId);
        if (cachedName != null) {
            System.out.println("--> Retrieved '" + productId + "' from cache.");
            return cachedName;
        }

        // If not in cache, simulate database call
        dbCallCount++;
        System.out.println("--> Fetching '" + productId + "' from database (Call #" + dbCallCount + ").");
        try {
            Thread.sleep(100); // Simulate delay
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        String productName = "Product " + productId + " Name";

        // Store in cache
        productCache.put(productId, productName);
        return productName;
    }
}

public class Main {
    public static void main(String[] args) {
        SimpleProductCache cache = new SimpleProductCache();
        ProductFetcher fetcher = new ProductFetcher(cache);

        System.out.println("--- First requests ---");
        System.out.println(fetcher.fetchProductName("A1"));
        System.out.println(fetcher.fetchProductName("B2"));

        System.out.println("\n--- Repeat requests ---");
        System.out.println(fetcher.fetchProductName("A1")); // Should be from cache
        System.out.println(fetcher.fetchProductName("B2")); // Should be from cache

        System.out.println("\n--- New request ---");
        System.out.println(fetcher.fetchProductName("C3")); // Should be from DB
    }
}

Opdatering af cache: @CachePut

Nogle gange vil du opdatere cachen med resultatet af et metodekald, selv om dataene allerede findes i cachen. Det er her, @CachePut kommer ind i billedet.

@CachePut(value = "products", key = "#product.id")
public Product updateProduct(Product product) {
// ... update product in database ...
return product;
}
  • I modsætning til @Cacheable udføres metoden altid.
  • Resultatet placeres derefter i cachen.

Brug den til metoder, der ændrer data, når du vil have, at cachen afspejler den nyeste tilstand.

Fjernelse af forældede data: @CacheEvict

Når data ændres i din database, skal du fjerne de gamle, forældede data fra cachen. Annoteringen @CacheEvict håndterer dette.

@CacheEvict(value = "products", key = "#id")
public void deleteProduct(String id) {
// ... delete product from database ...
}
  • Når denne metode kaldes, fjernes posten for den angivne key i cachen products.
  • Du kan også bruge allEntries = true til at rydde hele cachen.

Brug den efter slette- eller opdateringshandlinger for at sikre datakonsistens.

Quiz om cachestrategier

Du er ved at bygge en mikrotjeneste, der håndterer kundedata. Hvilken cachestrategi vil du bruge i følgende scenarier?

Cachelagring for bedre ydeevne: Opsummering

Tillykke! Du har lært om cachestrategier til mikrotjenester.

  • Cachelagring forbedrer ydeevnen og reducerer belastningen på databasen.
  • Distribuerede cacher som Redis er ideelle til mikrotjenester.
  • Springs cacheabstraktion forenkler cachelagring med annoteringer.
  • Brug @Cacheable til operationer, der primært læser data.
  • Brug @CachePut til at opdatere cachelagrede poster.
  • Brug @CacheEvict til at fjerne forældede cacheposter.

Hvis du mestrer cachelagring, kan du bygge meget skalerbare og responsive mikrotjenester.

Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
24
Lektioner
93

Ofte stillede spørgsmål

Er lektionen “Cachingstrategier til mikrotjenester” gratis?

Ja — hele teksten til “Cachingstrategier til mikrotjenester” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 9 lektioner i alt.

Hvad lærer jeg i “Cachingstrategier til mikrotjenester”?

Udforsk og implementér cachingmekanismer som Redis for at forbedre mikrotjenesternes ydeevne. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Spring Boot 4-mikrotjenester og REST-API'er?

Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 5 af 9.

Hvor lang tid tager lektionen “Cachingstrategier til mikrotjenester”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Spring Boot 4-mikrotjenester og REST-API'er-lektion?

Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Optimering af meddelelsesgennemløb
  2. Asynkron behandling med WebFlux
  3. Optimering af datastrukturen
  4. Skalering af producere og consumere
  5. Cachingstrategier til mikrotjenester
  6. Strategier til denormalisering
  7. Databasesharding og -replikering
  8. Overvågning og fejlfinding af databasen
  9. Benchmarking af RabbitMQ-ydeevne
← Tilbage til Spring Boot 4-mikrotjenester og REST-API'er