1

在探索我的新项目时,我遇到了一些遗留代码,其含义是将一些查询结果显式预取到 Hibernate 缓存中。

该代码解决的任务是根据某些属性值选择实体。

例如:

    SELECT c
    FROM MyEntity c
    LEFT OUTER JOIN c.relatedEntity relatedEntity
    WHERE c.field1 = :param1 AND relatedEntity.field1 = :param2 AND relatedEntity.field2 = :param3 

建议的改进是在运行此查询之前预取所有实体,即在主要查询之前运行以下查询之一:

    SELECT c, relatedEntity FROM MyEntity c LEFT OUTER JOIN c.relatedEntity relatedEntity

或者

    SELECT FROM MyEntity;
    SELECT FROM RelatedEntity;

您如何看待这种优化?能有用吗?如果“是”,在哪些情况下?

4

1 回答 1

0

当然它会很有用。如果您的 ehcache 和应用程序代码配置正确,这就是某种“缓存预热”。这将使您的应用程序立即受益于二级缓存,甚至可能从数据库缓存中受益,从而提高“首次”性能。
我们实际上做了很多缓存预热,以便将新启动的主机直接暴露给流量,而不会让我们的用户体验到由于缓存初始化而导致的性能下降。

于 2013-04-04T14:02:33.310 回答