大多数情况下,简短的回答(是/否)就足够了。我认为这个列表对于其他想了解Spring和Hibernate如何工作的人也很有用。
1) Hibernate支持以下缓存:1级缓存、2级缓存、查询缓存 2) Spring本身支持以下缓存方式:方法缓存
1级缓存 3) 1级缓存是每个Hibernate应用程序的一部分。 4) 1级缓存是为每个Hibernate会话创建的。 5) 1级缓存保存什么?对象还是只有其属性的值?查询及其结果?
2级缓存 6) 我发现:2级缓存在每个应用程序中只使用一次。这不是错误的吗?它不是在每个SessionFactory中使用一次吗?多个sessionfactorys = 多个2级缓存可能? 7) 2级缓存中保存什么:我认为只有属于一个记录的值,而不是对象本身。 8) 将一个记录的值存储在第二级缓存中时,是否可以将与之相关的值(从连接到外键的对象)一起存储? 9) 在第二级缓存中更新一个对象的值时,是否可以更新与之连接的对象在缓存中的值? 10) 当对象的值发生变化时,如何更新第二级缓存?刷新?我可以只更新缓存的一部分还是必须更新整个缓存? 11) 第二级缓存在哪些情况下有意义,在哪些情况下没有意义? 12) 缓存模式:每种缓存模式是否提供不同的缓存策略?例如,使用"read-only"缓存模式永远不需要进行数据库和缓存的同步?其他缓存模式是否提供同步?我认为同步必须由开发人员自己完成?
查询缓存 13) 查询缓存和第二级缓存有什么区别?在我看来:在查询缓存中,结果集被保存,但没有其值,只有其ID。当再次使用查询并且结果集仍然“正确”时,从第2级缓存中查询属于ID的值。 14) 对于查询缓存,必须使用第二级缓存吗? 15) 查询缓存在哪些情况下有意义,在哪些情况下没有意义?
Spring 16) Spring提供比方法缓存更多的缓存可能性吗? 17) 方法缓存与Hibernate缓存无关。 18) 但是:对于方法缓存,第2级缓存是必需的,例如Ehcache(也可由Hibernate使用) 19) 可以在没有数据库查询的情况下使用方法缓存吗?
混淆了 20) 如果将Ehcache用于Hibernate作为第2级缓存,并且将Ehcache用于Spring作为方法缓存,我可以使用相同的Ehcache实例吗?有没有可能混淆什么? 21) 当使用1级缓存和2级缓存时,它们是否会混淆?当查询数据库时,结果来自哪里,第1级还是第2