Redis Serializer
Nella scorsa puntata abbiamo visto come Redis possa essere sfruttato come session store all’interno di Spring: ma come fare per associare l’utente ad una sessione specifica? Scopriamo Redis Serializer!
Redis Serializer
In questo post, l’attenzione sarà rivolta all’adozione di un Serializer di sessione alternativo che migliora la nostra capacità di identificare l’utente collegato a una sessione specifica, consentendo un’analisi più dettagliata dei valori della sessione. In questo, il Serializer per il formato JSON è la scelta più ovvia. Memorizzando i valori degli attributi di sessione in formato JSON, migliora significativamente la leggibilità e l’interpretabilità dei dati.
L’implementazione di questo cambiamento richiede lo sviluppo di una classe ad-hoc, in cui viene definito il Serializer da utilizzare. A tal proposito, l’integrazione Spring Data Redis fornisce un set di RedisSerializer da poter utilizzare a tale scopo, come mostrato nella seguente implementazione:
@Configuration
public class SessionConfig implements BeanClassLoaderAware {
private ClassLoader loader;
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new Jackson2JsonRedisSerializer(objectMapper(), Object.class);
}
private ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModules(SecurityJackson2Modules.getModules(this.loader));
return mapper;
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.loader = classLoader;
}
}
In questa configurazione è stato scelto il Jackson2JsonRedisSerializer, rendendo super facile integrare il nuovo metodo di serializzazione, permettendoci di gestire i dati di sessione in modo molto più chiaro e diretto.
Esistono diverse opzioni di
RedisSerializer
adatte a vari casi d’uso. Per ottenere indicazioni sulla migliore opzione per le vostre esigenze specifiche, si rimanda ai test di prestazione effettuati, accessibili nel seguente repository GitHub:
Credits by Foogaro repo - Serialization time by Serializer
Dopo aver cancellato tutte le sessioni precedentemente memorizzate in Redis, l’applicazione può essere eseguita nuovamente e il login può essere effettuato come descritto in precedenza. A questo punto, la sessione verrà generata come al solito, ma i valori dei suoi attributi saranno in formato JSON, come illustrato di seguito:
La leggibilità è stata notevolmente migliorata, consentendo l’utilizzo di un parser JSON per navigare più efficacemente la struttura JSON.
Tuttavia, è ancora necessario uno sforzo manuale e individuare l’utente associato a una sessione rimane un processo impegnativo e soggetto a errori.
Nell’ultimo post, vedremo come utilizzare l’indicizzazione delle sessioni per migliorare le prestazioni della gestione delle sessioni e facilitare l’identificazione degli utenti all’interno del sistema!
Per approfondire l’argomento, Luigi Fùgaro ha pubblicato insieme a Mirko Ortensi un manuale su Redis, chiamato “Redis Stack for Application Modernization: Build real-time multi-model applications at any scale with Redis”: scoprilo qui!