应用程序缓存v.s. hibernate二级缓存,哪个使用?

时间:2014-05-17 07:47:18

标签: java hibernate jpa redis memcached

我可以选择使用应用程序缓存

手动将对象缓存到分发的memcached / redis集群

或者让hibernate二级缓存来执行缓存工作(对于那些应用程序对象)。

使用哪个更好?

1 个答案:

答案 0 :(得分:4)

这实际上取决于您的应用程序查询模型和流量需求。

  1. 使用Redis / Hazelcast可能会产生最佳性能,因为不再有任何往返DB的往返,但是您最终在数据库中存在标准化数据并且在缓存中存在非规范化副本,这将对您施加压力缓存更新策略。因此,只要持久数据发生更改,您就会以实现缓存更新为代价获得最佳性能。
  2. 使用二级缓存更容易设置,但它只按id存储实体。还有一个查询缓存,用于存储给定查询返回的ID。因此,二级缓存是一个两步过程,您需要进行微调以获得最佳性能。当您执行投影查询时,第二级对象缓存不会帮助您,因为它仅对实体加载进行操作。二级缓存的主要优点是,只要数据发生变化,就更容易保持同步,特别是如果所有数据都是由hibernate保留的。
  3. 因此,如果您需要最终性能,并且不介意实现缓存更新逻辑以确保最小的最终一致性窗口,那么请使用外部缓存。

    如果您只需要缓存实体(通常不会经常更改)并且您通常通过Hibernate实体加载来访问它们,那么二级缓存可以帮助您。