直接访问ehcache并仅在缓存未命中时使用hibernate

时间:2010-07-03 06:18:03

标签: hibernate orm caching jpa ehcache

环境:Seam 2.2.0,JPA,Hibernate 3.3.x,ehcache-core 2.0.1

以下是使用缓存和Hibernate的一些observations。我们已经在使用二级缓存,但对响应时间不太满意。

上面引用中提到的第三个选项(直接访问EHCache,仅在缓存未命中时使用Hibernate:20秒)讨论在持久层前使用ehcache。我们已经在我们的所有查询中使用了Seam的EntityQuery框架,是否可以在查询或加载对象之前首先启用上述选项,从而访问ehcache。在这种情况下如何处理实体的修改或删除,您是否必须从缓存中手动逐出这些条目。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

首先,我发现引用文章的数据非常奇怪(19秒获取连接表明连接池上存在争用)。所以我带着一点点盐。

  

我们已经在我们的所有查询中使用了Seam的EntityQuery框架,是否可以在查询或加载对象之前首先启用上述选项,然后再访问ehcache。

嗯,这实际上就是Hibernate L2缓存的工作原理。如a previous answer中所述, Hibernate二级缓存是读写缓存,如果发生缓存未命中,则从数据库中读取实体,然后将其移交给缓存以供后续访问

现在,如果您的意思是实现第三个选项,这将意味着完全绕过Hibernate L2缓存并手动完成所有操作。当然,这是可能的,但你自己在这里。正如我所说,我非常怀疑通过Hibernate引入了很多开销,所以我不会根据上述文章做出决定。测量事物。

  

在这种情况下如何处理实体的修改或删除,你是否必须从缓存中手动逐出这些条目。

完全手动。好运,交易,错误处理,并发等等。