1

编辑
RTFM 是 JVM 的新手,错误地假设 servlet 容器(在本例中为 Jetty)为每个请求创建一个新的 servlet 实例:完全错误。

所以,下面的问题是没有实际意义的,上面肯定了惰性 val 确实是“永远”的事实(或者只要定义惰性 val 的实例继续存在)

ORIGINAL 正如我现在所了解的,在基本的 servlet 环境中,我们从每个 HttpRequest 的全新状态开始。

这意味着每个请求都会重新产生惰性验证开销

我关心的一个特殊问题是数据库查询语句缓存(通过惰性验证)以及这是否会导致不必要的性能损失;即,在应用服务器上缓存查询语句的意义何在?

是的,使用连接池可以缓存独立于请求范围的查询语句,大加;但是,这并不能解决问题,即在每个请求上,一个 ORM/JDBC-Wrapper 都将经历相对昂贵的生成查询语句的操作,无论是否缓存。

所以问题是:在 servlet 环境中,查询缓存的障碍多于帮助?(我正在使用 ScalaQuery,它通过惰性 val 缓存查询)

唯一看起来有好处的情况是,当您在同一个请求中多次调用给定查询时,但这是我很少做的事情(主要是每次只运行一次 Foo 或 List[Foo] 的查询)请求

4

0 回答 0