Uso 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.
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 monitor or debug cache hits and misses in my application?
Fantastico!
Completion tasso migliorato a 3.33
Uso 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.
Grazie per i tuoi commenti!