Nó thực sự phụ thuộc vào mô hình truy vấn ứng dụng của bạn và nhu cầu lưu lượng truy cập.
- Sử dụng Redis / Hazelcast có thể mang lại hiệu suất tốt nhất vì sẽ không có bất kỳ chuyến đi vòng quanh DB nào nữa, nhưng cuối cùng bạn sẽ có một dữ liệu được chuẩn hóa trong DB và bản sao không chuẩn hóa trong bộ nhớ cache của bạn, điều này sẽ gây áp lực cho việc cập nhật bộ nhớ cache của bạn các chính sách. Vì vậy, bạn có được hiệu suất tốt nhất với chi phí triển khai cập nhật bộ nhớ cache bất cứ khi nào dữ liệu liên tục thay đổi.
- Sử dụng bộ nhớ cache cấp 2 dễ thiết lập hơn nhưng nó chỉ lưu trữ các thực thể theo id. Ngoài ra còn có một bộ nhớ cache truy vấn, lưu trữ các id được trả về bởi một truy vấn nhất định. Vì vậy, bộ nhớ cache cấp 2 là một quá trình gồm hai bước mà bạn cần phải tinh chỉnh để có được hiệu suất tốt nhất. Khi bạn thực hiện các truy vấn chiếu, bộ đệm đối tượng cấp 2 sẽ không giúp bạn, vì nó chỉ hoạt động khi tải thực thể. Ưu điểm chính của bộ nhớ đệm cấp 2 là dễ dàng đồng bộ hóa nó hơn bất cứ khi nào dữ liệu thay đổi, đặc biệt nếu tất cả dữ liệu của bạn được duy trì ở chế độ ngủ đông.
Vì vậy, nếu bạn cần hiệu suất cao nhất và bạn không ngại triển khai logic cập nhật bộ nhớ cache của mình để đảm bảo cửa sổ nhất quán cuối cùng tối thiểu, thì hãy sử dụng bộ nhớ cache bên ngoài.
Nếu bạn chỉ cần lưu vào bộ nhớ cache các thực thể (thường không thay đổi thường xuyên) và bạn chủ yếu truy cập những thực thể đó thông qua tải thực thể Hibernate, thì bộ nhớ cache cấp 2 có thể giúp bạn.