【问题标题】:Second Level Cache (Ehcache) in Hibernate along with Hibernate SearchHibernate 中的二级缓存 (Ehcache) 和 Hibernate Search
【发布时间】:2015-07-17 09:25:42
【问题描述】:

我使用 Spring Data JPA 和 hibernate 作为底层实现。 对于我的全文搜索和其他一些搜索查询,我使用的是 Hibernate Search。

我正在考虑使用 Ehcache 为未索引字段上的查询启用二级缓存。

是否可以同时使用这两种方法,这种策略是否有任何价值。

【问题讨论】:

    标签: hibernate jpa spring-data-jpa ehcache hibernate-search


    【解决方案1】:

    您是否也在使用非 Hibernate Search (Lucene) 查询?如果不是,则查询缓存没有用处。但是,如果您使用非 Lucene 查询,这可能是有意义的。但是,我建议通过 Hibernate Search 驱动所有查询,并确保搜索所需的所有数据都已编入索引。如果这不能回答你的问题,你可以提供一个更具体的例子。

    【讨论】:

    • 是的,到目前为止,我正在使用 lucene 和非 lucene 查询的混合,因此正在查看二级缓存
    • 如果您使用混合查询类型,您可以通过查询缓存加速 ORM 特定查询。顺便说一下,二级实体缓存应该对这两种情况都有好处。你也在利用这个吗?但如前所述,我可能会通过 Hibernate Search 驱动所有查询。
    • 你的意思是二级缓存也会提高我的 Hibernate 搜索性能?
    • 视情况而定。 Hibernate Search 的默认行为(除非您使用投影)是针对 Lucene 索引进行搜索以确定与您的查询匹配的实体的主键。然后从数据库中加载匹配的实体(以便您处理托管实体)。如果您启用了二级实体缓存,您可能确实会在这里受益,以防有问题的实体被缓存。