应用程式快取与休眠二级缓存,该使用哪个? [英] Application cache v.s. hibernate second level cache, which to use?

查看:169
本文介绍了应用程式快取与休眠二级缓存,该使用哪个?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a choice to use application cache,

即手动将对象缓存到分布式memcached/redis集群

that is manually cache objects to a distribute memcached/redis cluster

或者让休眠的第二级缓存完成缓存工作(针对那些应用程序对象).

OR let hibernate second level cache to do the cache work (for those application object).

使用哪个更好?

推荐答案

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

It really depends on your application querying model and the traffic demands.

  1. 使用Redis/Hazelcast可能会产生最佳性能,因为将不再有任何往返数据库的往返,但是最终您将在数据库中拥有规范化的数据,并在缓存中拥有非规范化的副本,这将给缓存更新带来压力政策.因此,只要持久性数据发生更改,您就会以实现高速缓存更新为代价来获得最佳性能.
  2. 使用2级缓存更易于设置,但仅按ID存储实体.还有一个查询缓存,用于存储给定查询返回的ID.因此,二级缓存是一个两步过程,您需要对其进行微调以获得最佳性能.当您执行投影查询时,二级对象缓存将无济于事,因为它仅在实体加载时起作用. 2级缓存的主要优点是,每当数据发生更改时,保持同步就更加容易,尤其是当您的所有数据都由休眠状态持久保存时.

因此,如果您需要最终的性能,并且不介意实现确保最小的最终一致性窗口的高速缓存更新逻辑,则可以使用外部高速缓存.

So, if you need ultimate performance and you don't mind implementing your cache update logic that ensures a minimum eventual consistency window, then go with an external cache.

如果您只需要缓存实体(通常不经常更改),而您大多通过Hibernate实体加载来访问实体,则二级缓存可以为您提供帮助.

If you only need to cache entities (that usually don't change that frequently) and you mostly access those through Hibernate entity loading, then 2nd level cache can help you.

这篇关于应用程式快取与休眠二级缓存,该使用哪个?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆