Det beror verkligen på din applikationsförfrågningsmodell och trafikkraven.
- Att använda Redis/Hazelcast kan ge den bästa prestandan eftersom det inte blir någon tur och retur till DB längre, men det slutar med att du har en normaliserad data i DB och en denormaliserad kopia i din cache, vilket kommer att sätta press på din cacheuppdatering politik. Så du får den bästa prestandan till priset av att implementera cacheuppdateringen närhelst den kvarstående data ändras.
- Att använda 2:a nivås cache är enklare att ställa in men det lagrar bara enheter efter id. Det finns också en frågecache som lagrar ID som returneras av en given fråga. Så den andra nivåns cache är en tvåstegsprocess som du behöver finjustera för att få bästa prestanda. När du kör projektionsfrågor kommer objektcachen på 2:a nivån inte att hjälpa dig, eftersom den bara fungerar på entitetsbelastning. Den största fördelen med 2:a nivås cache är att det är lättare att hålla det synkroniserat när data ändras, särskilt om all din data behålls i viloläge.
Så om du behöver ultimat prestanda och du inte har något emot att implementera din cacheuppdateringslogik som säkerställer ett minsta möjliga konsistensfönster, använd en extern cache.
Om du bara behöver cache-entiteter (som vanligtvis inte ändras så ofta) och du för det mesta kommer åt dem via Hibernate-enhetsladdning, kan cache på andra nivån hjälpa dig.