我相信,明智地使用Hibernate的二级缓存将在我的应用程序性能方面做得很好,为此,我已经从Internet和Hibernate课程开始对其进行研究。
尽管对二级缓存及其工作方式有很好的解释,但我的目标是从我没有找到的特定问题开始,确切地了解事情的工作方式,因此我将总体上对Hibernate的缓存提出一些问题。尤其是二级缓存。
有关回答的注意事项:
答:即使有些问题看起来很明显或无关紧要,我也很乐意回答。
B.如果问题取决于缓存提供者,我想听听有关Ehcache的答案
C.欢迎回答由于不确定性引起的部分问题
问题:
一旦配置了二级缓存,是否会禁用一级缓存?如果不是,那么在尝试获取实体时事件的处理如何发生,哪个缓存级别首先被命中?
查询缓存是否将查询文本另存为HQL或本机SQL?
通过JPA和直接使用Hibernate使用Hibernate进行二级缓存是否会工作相同?
我了解到查询缓存会通过与位于查询缓存中的ID命中二级缓存来参与二级缓存。如果由于某种原因某些ID不再位于第二级缓存中,又将再次获取所有实体,或者只是获取不存在的那一部分怎么办?
关于同步–在某个事务中通过更新存储在第二级高速缓存中的实体–完全何时更新第二级高速缓存中的实体?将进一步了解此行为可能如何影响二级缓存和查询缓存的更多详细信息。
谢谢!
最佳答案
否。继续使用一级缓存。唯一的区别是这些实体可能来自二级缓存而不是数据库,并且除了数据库之外,还将它们保存到二级缓存。
不像HQL,因为Criteria查询也可以被缓存。我认为使用SQL。但这不是必须缓存的唯一内容:查询的参数也被缓存。但是,您不必担心:缓存将查询缓存,只要执行两次相同的查询将命中缓存,缓存将使用缓存,而执行未缓存的查询则不会。
是。
只有那些不在缓存中的AFAIK。测试它并查看执行了哪些SQL查询。
这取决于cache concurrency strategy和缓存的功能。当实体为只读或几乎只读时,二级缓存主要有用。