Redis come Session Store - Best practices

banner

Questo post vuole fornire indicazioni e pratiche consigliate per l’impiego di Redis come Session Store all’interno del framework Spring.

Obiettivo aggiuntivo è sottolineare i vantaggi dell’uso delle sessioni per l’analisi dati.

È richiesta una conoscenza di base di Spring e dei principi relativi alle sessioni e al Session Store in contesti Web.

L’enfasi è posta su Redis, con una panoramica delle sue capacità e delle strategie consigliate per il suo utilizzo. Pur non focalizzandosi esclusivamente su Spring, il framework può essere occasionalmente citato. L’obiettivo è potenziare la comprensione e le competenze nell’utilizzo efficace di Redis in diversi contesti di sviluppo applicativo.

Per approfondire il tema di Spring con Docker, consiglio la playlist del canale di Emmecilab.

Lo Stack Tecnologico

Lo stack tecnologico utilizzato in questo articolo comprende una gamma di strumenti e framework specificamente selezionati per la loro robustezza e compatibilità.

I componenti includono:

  • JDK 17, non credo abbia bisogno di particolari presentazioni.
  • Spring Boot 3.2.3, che facilita lo sviluppo rapido di applicazioni.
    • Spring Security 6.2.2, che offre funzionalità di sicurezza complete per proteggere l’accesso alle applicazioni e i dati.
    • Spring Data Redis 3.2.3, che fornisce un’integrazione fluida con Redis per una gestione dei dati efficiente e soluzioni di caching.
  • Redis Stack 7.2, che offre capacità avanzate per la gestione delle strutture dati (come JSON), il caching, lo streaming e il message brokering con alte prestazioni.

Redis Stack

Ci sono due progetti principali a cui prestare attenzione: redis/redis-stack contiene sia il server chiamato Redis Stack che RedisInsight. Questo contenitore è ideale per lo sviluppo locale perché hai a disposizione RedisInsight incorporato per visualizzare i tuoi dati.

Invece, redis/redis-stack-server fornisce solo il server Redis Stack, un unico pacchetto che include Redis con i principali moduli ideale per la distribuzione in produzione.

Il Codice

È probabile che il codice utilizzato in questa prima demo sia reperibile pressoché ovunque su internet. L’unico aspetto degno di nota è il file application.yml, in cui Redis è configurato come Session Store.

spring:
  data:
    redis:
      port: 6379
      host: localhost
  session:
    store-type: redis
  security:
    user:
      password: password
      name: user
      roles: ["admin"]

Il resto del codice è abbastanza standard per la configurazione di MVC e Security in Spring.

Una parte interessante riguarda la configurazione della sicurezza, dove si definiscono quali risorse richiedono autenticazione e quali no, come mostrato di seguito:

    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .authorizeHttpRequests((authorize) -> authorize
                        .dispatcherTypeMatchers(DispatcherType.ERROR).permitAll()
                        .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                        .anyRequest().authenticated()
                )
                .formLogin((formLogin) -> formLogin
                        .loginPage("/login")
                        .permitAll()
                )
                .logout((logout) -> logout
                        .permitAll()
                )
                .build();
    }

Il codice è progettato per essere autoesplicativo, complice la sua chiara indentazione:

  1. Tutte le richieste richiedono autenticazione, ad eccezione di quelle che richiedono risorse statiche e la gestione degli errori.
  2. L’accesso alla risorsa di login è consentito.
  3. È consentito anche l’accesso alla risorsa di logout.

Primo ciak

La prima cosa da fare è dotarsi di Redis Stack per storicizzare e gestire le sessioni. A tal proposito, verrà impiegato Docker come strumento principale.

docker run -d --name=redis-spring-session -p 6379:6379 redis/redis-stack-server:7.2.0-v8

Successivamente, l’applicazione Spring Boot può essere avviata sia dall’IDE che dalla linea di comando, a seconda delle preferenze. L’applicazione sarà disponibile al seguente link:

La pagina di login verrà visualizzata come segue:

Login page

Inserire user come nome utente e password come password, quindi fare clic sul pulsante Log in.

La pagina successiva mostrerà un elenco degli attributi di sessione:

Attributes list

Fino a questo punto, tutto dovrebbe funzionare correttamente. Ora, esaminiamo i dati memorizzati in Redis utilizzando RedisInsight, bellissima applicazione grafica per Redis.

RedisInsight può essere scaricato gratuitamente dal sito seguente sito web:

Dopo l’installazione, avviare RedisInsight e collegarlo all’istanza Redis utilizzando localhost e la porta 6379.

I dati in Redis dovrebbero assomigliare alla seguente schermata:

Attributes list

Una chiave sarà associata all’ID di sessione di Spring, comprendendo la sessione con tutti i suoi attributi. Inizialmente, i dettagli potrebbero non essere del tutto chiari. E’ possibile dedurre e intuire la classe di un attributo specifico e alcune delle sue proprietà. Questa mancanza di chiarezza, o per meglio dire di leggibiltià, è dovuta al fatto che gli attributi sono stati memorizzati utilizzando un formato di serializzazione binaria, rendendoli non pienamente leggibili.

Quindi, per identificare l’utente associato a una sessione, è necessaria un’ispezione più dettagliata dei suoi valori. Questo compito rimane gestibile con una singola sessione. Tuttavia, con centinaia o migliaia di sessioni, individuare la sessione di un utente specifico diventa complicato. Per poter analizzare in modo efficace i dati di una sessione, è opportuno che questi siano in un formato più leggibile e accessibile.

Nel prossimo post ci si concentrerà sull’implementazione di miglioramenti finalizzati proprio all’analisi dei dati.

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!

Post correlati

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Ottobre

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di agosto di Sophie Aiello

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!