在servlet环境中使用惰性val缓存Scala语句

时间:2012-04-30 18:45:06

标签: scala caching lazy-evaluation

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

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

ORIGINAL 正如我now understand,在一个基本的servlet环境中,我们从每个HttpRequest的一个干净的平板开始。

这意味着每次请求都会重新招致 lazy val开销

我担心的一个特殊问题是数据库查询语句缓存(通过延迟val)以及是否会导致不必要的性能损失;即,当应用程序服务器在每个请求生存和死亡时,在应用程序服务器上缓存查询语句的意义何在?

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

所以问题是:在servlet环境中查询缓存比帮助更多的障碍? (我正在使用ScalaQuery通过lazy val来缓存查询)

唯一有益处的情况是你在同一个请求中多次调用一个给定的查询,但这是我很少做的事情(大多只是为一个Foo或List运行一个查询[Foo]每次请求一次

0 个答案:

没有答案