【问题标题】:How to avoid same query execution multiple times?如何避免多次执行相同的查询?
【发布时间】:2016-09-22 06:40:27
【问题描述】:

我需要一种方法来避免多次执行相同的查询。 从代码的角度来看,我不需要任何帮助。高级方法就可以了。

目前我在不同的类中执行相同的休眠查询,这些执行是同一请求的一部分。 截至目前,我正在使用请求级缓存来存储数据。后来我从缓存而不是数据库中获取这些数据以提高性能。但我想知道除了上述方法之外是否还有其他方法可以遵循。

如果您能在这方面提供帮助,那将非常有帮助。

谢谢

【问题讨论】:

  • 我有点惊讶的是,重复的查询没有在大约 0 毫秒内被数据库本身返回。
  • 我建议重构代码的相关部分,以便每个请求只执行一次有问题的查询。
  • @Joop Eggen .. 感谢您的回复。它是 Oracle 或 Hibernate 的现有功能吗?
  • 不,数据库中的“开箱即用”(不完全正确)在某些情况下,重复查询通常几乎是即时的(DB2、Oracle 甚至 MySQL)。应该检查时间。我曾经在不需要的情况下“优化”了表中数据库数据的下拉列表。真的很沮丧,已经提出了一个很好的解决方案,然后发现它。
  • 如果您还没有,请查看 Hibernate 中的查询缓存docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/…

标签: java hibernate


【解决方案1】:

您可以注册一个将实现ServletContextListener 的网络监听器。 您将需要实现contextInitialized(应用程序部署)和contextDestroyed(应用程序取消部署)。

@WebListener
public final class CacheBootstrap implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
       // load data into cache (hql?)
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
       // unload data from cache (hql?)
    }
}

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2020-12-01
    • 2016-12-12
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多