Uso 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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Uso 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.
Grazie per i tuoi commenti!