这可能是一个非常普遍的问题。我想知道缓存(一级缓存和二级缓存)是否是在Hibernate中减少db命中次数的唯一方法。
你的问题很普遍,但是在高层次上是的缓存将解决多个数据库命中问题。你也可以使用hibernate缓存你也可以使用Spring缓存抽象对于细粒度实现。还有其他方面,这取决于你的问题陈述和解决方法。
请记住:任何缓存都会增加应用程序的内存使用,并且您需要适当地清理缓存以避免使用任何过时的信息。
减少DB查询的数量可以分为两个步骤:
- 消除N + 1个可能的问题源。
- 查找应用程序中的热点,最需要的数据,并通过各种方式缓存。
前者可以通过@Fetch(FetchMode.SUBSELECT), JPQL/HQLJOIN FETCH和JPA实体图。对于后者,您可以使用Spring缓存或特定于hibernate的缓存。