我们有一个web应用程序,它侦听web服务调用,构造查询,从数据库中提取数据,并将结果发送回客户端。由于我们遇到了一些性能问题,我们希望在服务器端缓存数据。查询很复杂,涉及多个连接。数据库通过web应用程序外部的另一个应用程序更新。我不认为我们可以使用EHCache,因为数据库不是通过相同的应用程序更新的,并且查询参数经常变化。我们可以在这里采用哪些缓存策略来提高性能?注意:查询已经过优化,以获得更好的性能。
发布于 2010-11-10 18:01:58
我不认为我们可以使用EHCache,因为数据库不是通过相同的应用程序更新的
但是您也可以自己做(请参阅SessionFactory
上的各种evictXxx
方法)。根据更新频率的不同,您仍可能获得好处。
还要注意的是,在其他实现中,EHCache只是一个二级缓存实现(不管你是否使用EHCache,都没有关系,它使用的是与问题相关的二级缓存)。
(...)并且查询参数正在频繁地改变。
那就更烦人了。使用查询缓存可以很好地处理频繁执行的查询(包括参数)。如果重新执行给定的查询(包括参数)是不太可能的事件,那么您不会从查询缓存中获得太多好处。
在这种情况下,我可能会尝试使用Query#iterate()
而不是Query#list()
。后者以List
的形式返回查询结果,前者:
按需初始化作为结果返回的
实体。第一个SQL查询只返回标识符。
如果它们不是,它不会表现得更好。
我们可以在这里采用哪些缓存策略来提高性能?
我没有比上面这个更好的建议了。当可能发生缓存命中时,缓存工作。
注意:查询已经过优化,以获得更好的性能。
嗯..。你什么意思?:)
https://stackoverflow.com/questions/4137147
复制相似问题