Това наистина зависи от модела на заявки за вашето приложение и от изискванията за трафик.
- Използването на Redis/Hazelcast може да доведе до най-добра производителност, тъй като вече няма да има връщане към DB, но в крайна сметка имате нормализирани данни в DB и денормализирано копие в кеша си, което ще окаже натиск върху актуализирането на кеша ви политики. Така получавате най-добра производителност с цената на внедряване на актуализацията на кеша всеки път, когато се променят постоянните данни.
- Използването на кеша от 2-ро ниво е по-лесно за настройка, но съхранява обекти само по идентификатор. Има и кеш на заявки, съхраняващ идентификатори, върнати от дадена заявка. Така че кешът от 2-ро ниво е процес в две стъпки, който трябва да прецизирате, за да получите най-добрата производителност. Когато изпълнявате заявки за проекция, кешът на обекти от 2-ро ниво няма да ви помогне, тъй като работи само при натоварване на обект. Основното предимство на кеша от 2-ро ниво е, че е по-лесно да го поддържате в синхрон, когато данните се променят, особено ако всичките ви данни се запазват чрез хибернация.
Така че, ако имате нужда от върховна производителност и нямате нищо против да приложите логиката за актуализиране на кеша, която осигурява минимален прозорец за евентуална последователност, тогава използвайте външен кеш.
Ако трябва само да кеширате обекти (които обикновено не се променят толкова често) и имате достъп до тях предимно чрез зареждане на обекти в хибернация, тогава кешът от 2-ро ниво може да ви помогне.