缓存spring / hibernate webapp

时间:2009-10-19 06:59:25

标签: hibernate spring caching

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

我将Hibernate用于我的ORM,而Hibernate为对象提供了缓存。但是,对于对象列表,就像最新内容的首页列表一样,我不知道如何最好地缓存该内容。现在,我让我的Spring控制器只返回一个标准的JSP页面,然后我在JSP级别使用oscache包裹着对另一个类的调用。

但是,这看起来不那么优雅。我真正想要的是让我的控制器可以访问缓存的结果(如果有的话),这样JSP就可以关注显示结果了。

我有什么选择?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

对于这种缓存,Hibernate将问题分为两个层次:

  1. 与查询对应的ID列表:此结果可能会以多种方式发生变化。例如,如果更改了查询使用的任何表,则可以更改结果。它是否被有效地改变将难以计算和维持最新,因此在大多数情况下它是低效的。所以 Hibernate选择不缓存与查询相对应的ID
  2. 一旦知道了与查询对应的id列表,就需要与返回的实体相对应的所有数据,以及所有获取的实体(或组件)。在这里,我们假设您确定这些实体足够稳定且读取足够,以便缓存它们是可取的。这种数据检索完全受益于常规的二级Hibernate缓存

  3. 为了缓存效率和代码简单性,我将这些结果拆分为两个级别:

    • 只返回id的查询(加上可能为第二级Hibernate缓存选择的实体)
    • 通过id获取的其他数据,以从第二级缓存中受益