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

L'applicazione verrà completamente assemblata e testata utilizzando Redis e Spring Boot. La cache aumenterà notevolmente la velocità di elaborazione delle richieste e ridurrà il carico sul database.

Breve riepilogo dal video

Nel programma è stata utilizzata 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 al database non necessarie 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, è importante 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 durante l'elaborazione.

Dopo la Cache

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

Riepilogo

Caching 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 risulta 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 test if my cache is working correctly in my own project?

Awesome!

Completion rate improved to 3.33

bookUso Pratico degli Hash

Scorri per mostrare il menu

L'applicazione verrà completamente assemblata e testata utilizzando Redis e Spring Boot. La cache aumenterà notevolmente la velocità di elaborazione delle richieste e ridurrà il carico sul database.

Breve riepilogo dal video

Nel programma è stata utilizzata 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 al database non necessarie 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, è importante 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 durante l'elaborazione.

Dopo la Cache

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

Riepilogo

Caching 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 risulta 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