Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Uso Pratico degli Hash | Caching con Redis e Spring Boot
Introduzione a Redis

bookUso Pratico degli Hash

Assembleremo completamente la nostra applicazione e la testeremo utilizzando Redis e Spring Boot. La cache velocizzerà notevolmente l'elaborazione delle richieste e ridurrà il carico sul database.

Breve riepilogo dal video

Nel nostro programma, abbiamo utilizzato la seguente logica: quando un utente viene aggiunto al database principale, i suoi dati non vengono memorizzati nella cache perché non è ancora necessario.

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

Il metodo createUser salva semplicemente l'utente nel database.

Quando arriva una richiesta per recuperare i dati di un utente tramite ID, si verifica prima se le informazioni sono disponibili nella cache Redis. Questo aiuta a evitare query inutili al database se i dati sono già in cache.

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

Utilizzando l'annotazione @Cacheable, i dati vengono memorizzati nella cache sotto la chiave user-cache, che include il valore dell'id (user-cache:20 per un utente con ID 20). Se i dati sono presenti nella cache, vengono recuperati e restituiti. Se i dati non sono presenti nella cache, il metodo interroga il database.

Durante la cancellazione dei dati dal database, è fondamentale rimuoverli anche dalla cache per garantire la coerenza dei dati ed evitare l'utilizzo di informazioni obsolete.

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

Il metodo deleteUser elimina l'utente dal database e rimuove i suoi dati dalla cache Redis per evitare l'utilizzo di informazioni obsolete nelle query future.

Vantaggi della Cache

Ed ecco la parte interessante — perché abbiamo implementato la cache? Dopo aver aggiunto la cache Redis, le richieste sono diventate molto più veloci — letteralmente fino a 20 volte più veloci! Questo è chiaramente dimostrato negli screenshot qui sotto.

Prima della Cache

Prima di implementare la cache, ogni richiesta veniva inviata direttamente al database, causando notevoli ritardi nell'elaborazione.

Dopo la Cache

Con la cache attiva, la maggior parte delle richieste viene ora gestita da Redis, il che riduce significativamente i tempi di risposta.

Riepilogo

La cache con Redis ha permesso di ottimizzare le prestazioni dell'applicazione, aumentare la velocità di elaborazione delle richieste e ridurre il carico sul database. Questo approccio è particolarmente vantaggioso per le applicazioni ad alto traffico in cui la velocità di elaborazione delle richieste è fondamentale.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain how the @Cacheable and @CacheEvict annotations work in more detail?

What are some best practices for using Redis caching in Spring Boot applications?

How can I monitor or debug cache hits and misses in my application?

bookUso Pratico degli Hash

Scorri per mostrare il menu

Assembleremo completamente la nostra applicazione e la testeremo utilizzando Redis e Spring Boot. La cache velocizzerà notevolmente l'elaborazione delle richieste e ridurrà il carico sul database.

Breve riepilogo dal video

Nel nostro programma, abbiamo utilizzato la seguente logica: quando un utente viene aggiunto al database principale, i suoi dati non vengono memorizzati nella cache perché non è ancora necessario.

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

Il metodo createUser salva semplicemente l'utente nel database.

Quando arriva una richiesta per recuperare i dati di un utente tramite ID, si verifica prima se le informazioni sono disponibili nella cache Redis. Questo aiuta a evitare query inutili al database se i dati sono già in cache.

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

Utilizzando l'annotazione @Cacheable, i dati vengono memorizzati nella cache sotto la chiave user-cache, che include il valore dell'id (user-cache:20 per un utente con ID 20). Se i dati sono presenti nella cache, vengono recuperati e restituiti. Se i dati non sono presenti nella cache, il metodo interroga il database.

Durante la cancellazione dei dati dal database, è fondamentale rimuoverli anche dalla cache per garantire la coerenza dei dati ed evitare l'utilizzo di informazioni obsolete.

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

Il metodo deleteUser elimina l'utente dal database e rimuove i suoi dati dalla cache Redis per evitare l'utilizzo di informazioni obsolete nelle query future.

Vantaggi della Cache

Ed ecco la parte interessante — perché abbiamo implementato la cache? Dopo aver aggiunto la cache Redis, le richieste sono diventate molto più veloci — letteralmente fino a 20 volte più veloci! Questo è chiaramente dimostrato negli screenshot qui sotto.

Prima della Cache

Prima di implementare la cache, ogni richiesta veniva inviata direttamente al database, causando notevoli ritardi nell'elaborazione.

Dopo la Cache

Con la cache attiva, la maggior parte delle richieste viene ora gestita da Redis, il che riduce significativamente i tempi di risposta.

Riepilogo

La cache con Redis ha permesso di ottimizzare le prestazioni dell'applicazione, aumentare la velocità di elaborazione delle richieste e ridurre il carico sul database. Questo approccio è particolarmente vantaggioso per le applicazioni ad alto traffico in cui la velocità di elaborazione delle richieste è fondamentale.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 4
some-alt