代码之家  ›  专栏  ›  技术社区  ›  Brandon Yarbrough

缓存Spring/Hibernate webapp

  •  3
  • Brandon Yarbrough  · 技术社区  · 15 年前

    我有一个网站,允许以各种方式搜索内容列表,例如“显示用户523按日期创建的内容”或“显示最近10篇文章的列表”。

    我对ORM使用Hibernate,Hibernate为对象提供缓存。不过,对于对象列表,比如最新内容的首页列表,我对于如何最好地缓存这些内容感到茫然。现在,我让我的Spring控制器返回一个标准的JSP页面,然后在JSP级别使用oscache,围绕对另一个类的调用进行包装。

    不过,这似乎不雅。我真正想要的是我的控制器能够访问缓存的结果(如果有),这样JSP就可以只关注显示结果。

    我在这里有什么选择?

    2 回复  |  直到 15 年前
        1
  •  3
  •   skaffman    15 年前

    您的意思是除了实体之外,还要缓存休眠查询的结果吗?如果是这样,那么你需要看看 query caching .

        2
  •  0
  •   KLE rslite    15 年前

    对于此缓存,Hibernate将问题分为两个级别:

    1. 与查询相对应的ID列表:此结果可能在许多方面发生更改。例如,如果查询使用的任何表发生了更改,则可以更改结果。它是否被有效地更改将很难计算和保持最新,因此在大多数情况下效率很低。所以 Hibernate选择不缓存与查询相对应的ID .
    2. 一旦知道了与查询相对应的ID列表,还需要返回的实体对应的所有数据,以及获取的所有实体(或组件)。在这里,我们假设您决定这些实体足够恒定,并且读取足够多的内容,以便缓存它们是明智的。这个 数据检索完全得益于常规的二级休眠缓存 .

    为了提高缓存效率和代码简单性,我将希望缓存的结果分为两个级别:

    • 只返回ID的查询(加上可能提取的实体,这些实体不是为二级休眠缓存选择的)
    • 通过ID获取的其他数据,以从二级缓存中获益