Hibernate 用于频繁更改查询的缓存
我们有一个web应用程序,它侦听web服务调用、构造查询、从数据库中提取数据并将结果发送回客户端。由于遇到一些性能问题,我们希望在服务器端缓存数据。查询非常复杂,涉及多个连接。数据库通过web应用程序之外的另一个应用程序进行更新。我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的,而且查询参数经常更改。我们可以在这里采用哪些缓存策略来提高性能? 注意:查询经过优化以获得更好的性能 我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的 如果不使用Hibernate的API,Hibernate将无法在需要时使相关的二级缓存区域无效。但是您可以自己做(请参阅Hibernate 用于频繁更改查询的缓存,hibernate,caching,ehcache,Hibernate,Caching,Ehcache,我们有一个web应用程序,它侦听web服务调用、构造查询、从数据库中提取数据并将结果发送回客户端。由于遇到一些性能问题,我们希望在服务器端缓存数据。查询非常复杂,涉及多个连接。数据库通过web应用程序之外的另一个应用程序进行更新。我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的,而且查询参数经常更改。我们可以在这里采用哪些缓存策略来提高性能? 注意:查询经过优化以获得更好的性能 我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的 如果不使用Hiber
SessionFactory
上的各种execxxx
方法)。根据更新的频率,您可能仍然会获得好处
还要注意的是,EHCache只是其中一个二级缓存实现(无论您是否使用EHCache都不相关,而是使用与问题相关的二级缓存)
(…)和查询参数经常更改
那更烦人。对于频繁执行的查询(包括参数),使用查询缓存非常有效。如果重新执行给定的查询(包括参数)是不太可能发生的事件,那么您将不会从查询缓存中获得太多好处
在这种情况下,我可能会尝试使用Query#iterate()
而不是Query#list()
。后者返回的查询结果为列表
,前者为:
作为结果返回的实体按需初始化第一个SQL查询仅返回标识符
如果与id对应的实体位于二级缓存中,这可能会提供更好的性能。如果不是这样,它的表现也不会更好
我们可以在这里采用哪些缓存策略来提高性能
我没有比上述建议更好的建议了。当缓存命中是一个可能的事件时,缓存工作
注意:查询经过优化以获得更好的性能
嗯。。。你什么意思?:)