Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Praktisk Användning av Hashstrukturer | Cachelagring med Redis och Spring Boot
Introduktion till Redis

bookPraktisk Användning av Hashstrukturer

Vi kommer att montera vår applikation fullt ut och testa den med Redis och Spring Boot. Caching kommer att avsevärt öka hastigheten på begäranshanteringen och minska belastningen på databasen.

Kort sammanfattning från videon

I vårt program använde vi följande logik: när en användare läggs till i huvuddatabasen cachelagras inte deras data eftersom det ännu inte är nödvändigt.

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

Metoden createUser sparar helt enkelt användaren i databasen.

När en förfrågan kommer in för att hämta en användares data via ID kontrollerar vi först om informationen finns tillgänglig i Redis-cachen. Detta hjälper till att undvika onödiga databasfrågor om datan redan är cachad.

@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))
    );
}

Med hjälp av annoteringen @Cacheable cachas data under nyckeln user-cache, som inkluderar värdet av id (user-cache:20 för en användare med ID 20). Om datan finns i cachen hämtas och returneras den. Om datan inte finns i cachen gör metoden en förfrågan till databasen.

Vid borttagning av data från databasen är det viktigt att även ta bort den från cachen för att säkerställa att datan förblir konsekvent och att inaktuell information inte används.

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

Metoden deleteUser tar bort användaren från databasen och rensar deras data från Redis-cachen för att förhindra användning av föråldrad information vid framtida förfrågningar.

Fördelar med caching

Nu till det intressanta — varför implementerade vi caching? Efter att ha lagt till Redis-cachen blev förfrågningarna mycket snabbare — faktiskt upp till 20 gånger snabbare! Detta visas tydligt i skärmdumparna nedan.

Före caching

Innan caching implementerades gick varje förfrågan direkt till databasen, vilket resulterade i betydande fördröjningar vid bearbetning.

Efter caching

Med caching på plats hanteras nu de flesta förfrågningar av Redis, vilket avsevärt minskar svarstiden.

Sammanfattning

Caching med Redis har möjliggjort optimering av applikationens prestanda, snabbare begäranhantering och minskad belastning på databasen. Detta tillvägagångssätt är särskilt fördelaktigt för applikationer med hög trafik där hastighet vid begäranhantering är avgörande.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 3.33

bookPraktisk Användning av Hashstrukturer

Svep för att visa menyn

Vi kommer att montera vår applikation fullt ut och testa den med Redis och Spring Boot. Caching kommer att avsevärt öka hastigheten på begäranshanteringen och minska belastningen på databasen.

Kort sammanfattning från videon

I vårt program använde vi följande logik: när en användare läggs till i huvuddatabasen cachelagras inte deras data eftersom det ännu inte är nödvändigt.

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

Metoden createUser sparar helt enkelt användaren i databasen.

När en förfrågan kommer in för att hämta en användares data via ID kontrollerar vi först om informationen finns tillgänglig i Redis-cachen. Detta hjälper till att undvika onödiga databasfrågor om datan redan är cachad.

@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))
    );
}

Med hjälp av annoteringen @Cacheable cachas data under nyckeln user-cache, som inkluderar värdet av id (user-cache:20 för en användare med ID 20). Om datan finns i cachen hämtas och returneras den. Om datan inte finns i cachen gör metoden en förfrågan till databasen.

Vid borttagning av data från databasen är det viktigt att även ta bort den från cachen för att säkerställa att datan förblir konsekvent och att inaktuell information inte används.

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

Metoden deleteUser tar bort användaren från databasen och rensar deras data från Redis-cachen för att förhindra användning av föråldrad information vid framtida förfrågningar.

Fördelar med caching

Nu till det intressanta — varför implementerade vi caching? Efter att ha lagt till Redis-cachen blev förfrågningarna mycket snabbare — faktiskt upp till 20 gånger snabbare! Detta visas tydligt i skärmdumparna nedan.

Före caching

Innan caching implementerades gick varje förfrågan direkt till databasen, vilket resulterade i betydande fördröjningar vid bearbetning.

Efter caching

Med caching på plats hanteras nu de flesta förfrågningar av Redis, vilket avsevärt minskar svarstiden.

Sammanfattning

Caching med Redis har möjliggjort optimering av applikationens prestanda, snabbare begäranhantering och minskad belastning på databasen. Detta tillvägagångssätt är särskilt fördelaktigt för applikationer med hög trafik där hastighet vid begäranhantering är avgörande.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4
some-alt