Det afhænger virkelig af din ansøgningsmodel og trafikkravene.
- Brug af Redis/Hazelcast kan give den bedste ydeevne, da der ikke længere vil være nogen rundrejse til DB længere, men du ender med at have en normaliseret data i DB og denormaliseret kopi i din cache, hvilket vil lægge pres på din cacheopdatering politikker. Så du opnår den bedste ydeevne på bekostning af at implementere cacheopdateringen, når de vedvarende data ændres.
- Brug af 2. niveaus cache er nemmere at konfigurere, men det gemmer kun enheder efter id. Der er også en forespørgselscache, der gemmer id'er, der returneres af en given forespørgsel. Så cachen på 2. niveau er en totrinsproces, som du skal finjustere for at få den bedste ydeevne. Når du udfører projektionsforespørgsler, vil objektcachen på 2. niveau ikke hjælpe dig, da den kun fungerer ved entitetsbelastning. Den største fordel ved 2. niveaus cache er, at det er nemmere at holde det synkroniseret, når data ændres, især hvis alle dine data fortsætter i dvale.
Så hvis du har brug for ultimativ ydeevne, og du ikke har noget imod at implementere din cache-opdateringslogik, der sikrer et minimum af eventuel konsistensvindue, så gå med en ekstern cache.
Hvis du kun har brug for at cache entiteter (som normalt ikke ændrer sig så ofte), og du for det meste får adgang til dem via Hibernate-entitetsindlæsning, så kan 2. niveaus cache hjælpe dig.