Presumo che tu stia facendo riferimento all'oggetto HttpSession e non a un oggetto bean Session J2EE.
Se hai un solo server, la Sessione è come una sorta di Mappa globale a cui puoi accedere ogni volta che l'utente fa una richiesta. Grandi oggetti o piccoli oggetti, in entrambi i casi, possono essere inseriti nella mappa, ma a seconda di quanto li lasci possono essere problematici.
La maggior parte dei server delle applicazioni rimuove le sessioni scadute, quindi se si prevede che i visitatori lascino il sito dopo un po ', allora forse non è necessario eseguire alcuna manutenzione della sessione e si può semplicemente lasciare scadere la sessione e il server delle applicazioni pulirà dopo di te.
Tuttavia, se si prevede che molti utenti rimarranno sul sito per un lungo periodo e potrebbero potenzialmente avere oggetti duraturi nelle loro sessioni, e non si dispone di memoria sufficiente per gestirli, allora è necessario qualche altro approccio.
L'approccio più semplice potrebbe consistere nell'usare una sorta di cache LRU. Ad esempio, potresti utilizzare commons LRUMap che ti consente di impostare una dimensione massima sulla mappa e rimuove gli elementi di cui non ha più bisogno. In questo modo, puoi avere una cache globale per i tuoi oggetti di grandi dimensioni, e se hai troppi utenti la cache semplicemente lascia cadere i dati. Le prestazioni soffrono se ci sono molti errori nella cache, ma almeno tutto funziona ancora correttamente.
Alla fine della giornata, se non hai abbastanza RAM per immagazzinare roba e sufficiente larghezza di banda del database per gestire le miss, la tua app andrà in crash a prescindere dai trucchi che usi.
Gli svantaggi dell'utilizzo di HttpSession:
- Se si dispone di più server, ciò complica il failover o il bilanciamento del carico.
- Le sessioni, se di lunga durata, possono essere una sorta di perdita di memoria, in cui i dati vengono memorizzati nella cache e non vengono mai letti o eliminati.
- Le sessioni non sono condivise per utente, quindi non sono utili come cache generiche.
Svantaggi a una mappa globale come cache:
- Devi pulire i dati da solo o utilizzare una libreria di terze parti che esegue la pulizia.
- Se si dispone di più server, gli utenti devono rimanere sullo stesso server per beneficiare della cache.
- Tuttavia, a differenza di Sessioni, se ci sono dati che possono essere condivisi per utente, è facile con una mappa globale.