3

我尝试在项目中使用 jooq,但出于性能原因,我想缓存查询。在性能考虑部分的用户手册中,提到了查询缓存,但没有关于如何实现它的示例。所以我尝试缓存一个查询(例如 SimpleSelectConditionStep),如下所示:

SimpleSelectConditionStep query = getFromPool();
if(query != null) {
    factory.attach(query);
    query.bind(1,"John");
} else {
   // create query
   factory.select(PERSON).where(PERSON.NAME.equal("Michael"));
}
// fetch and use query
result = query.fetchOne();
.....
putToPool(query);

我的软件是一个多线程 Web 应用程序,但可以保证两个不同的线程不能同时使用相同的查询(池在再次放入池之前不会返回相同的查询)。

我知道工厂不是线程安全对象,但我想知道在代码中使用这样的查询会导致问题吗?

4

1 回答 1

0

如果准备语句需要很长时间,您也许可以使用 jOOQ 的语句重用功能:

http://www.jooq.org/doc/latest/manual/sql-execution/reusing-statements

如果经常执行相同的查询,这将在查询内部保留一个打开的语句。除此之外,我怀疑对于您的示例中的简单查询,您应该需要 jOOQ 对象的缓存。

于 2013-06-27T20:33:13.077 回答