Hibernate和Spring 缓存的二十二问,干货分享

综合

(1)问:Hibernate支持一级缓存、二级缓存和查询缓存对吗

答:是的

(2)问:spring本身仅仅支持方法缓存

答:是的,spring3.1引入了在方法上的基于注解的新的缓存抽象

一级缓存

(3)问:Hibernate应用的每一个部分都支持一级缓存

答:是的

(4)问:每一个Hibernate-Session都会创建一个一级缓存

答:是的,你可以手动的清楚它

(5)问:在一级缓存中存储的是什么?对象或者仅仅是属性的值?

答:在Session生命周期内获取到的所有对象的一个map集合,如果第二次通过id获取相同的对象,它将从一级缓存中获取。

二级缓存

(6)问:我发现每个应用使用二级缓存一次,对吗?是每一个Sessionfactory使用一次吗?

答:是的,通常情况下一个应用只有一个Session factory

(7)问:在二级缓存中存储的是什么,我的观点是一条记录的值,而不是对象本身

答:和一级缓存中存储的内容是一样的,但是存活的更久,二级缓存通常由更强大的缓存支持而一级缓存仅仅是一个map(甚至都不是线程安全的)。它存储了所有的实体,包括懒加载的关系

(8)问:当在二级缓存中存储一条记录的值的时候,也存储其他相关的值吗(外键相关的值)?

答:你不需要手动来做,程序会自动完成

(9)问:当在二级缓存中更新一个对象的值的时候,同样也更新在缓存中的和这个对象关联的值吗?

答:同上

(10)问:当我在缓存中对象的值改变的时候,我们怎么更新二级缓存的值,flush?我仅仅更新缓存的一部分还是更新整个缓存?

答:Hibernate会为你做好配置,你永远也不需要直接和二级缓存交互

(11)问:二级缓存在什么地方有意义,在什么地方没有意义?

答:通过主键经常读的数据,read-to-write因数非常高的操作

(12)问:缓存模式:每一个缓存模式都提供了不同的缓存策略吗?例如,read-only模式没有数据库同步,缓存有必要吗?其他换粗模式提供同步吗?同步必须由开发人员自己来做吗?

答:缓存模式帮助Hibernate选择缓存和失效的最好的策略,例如是read-only模式,Hibernate就不需要关心它的失效问题,但是这种模式将会禁止任何形式的更新。

查询缓存

(13)问:二级缓存和查询缓存的区别是什么,我的观点:在查询缓存中结果集被保留,但是没有其他的值,仅仅是他们的id。当再次使用查询的时候,并且结果集依然正确的情况下,属于这些id的值从二级缓存中获取

答:准确但是很广的问题

(14)问:对于查询缓存来说,二级缓存必须使用吗?

答:没有二级缓存,查询缓存会拖慢整个系统

(15)问:查询缓存在什么地方有用,在什么地方没有用?

答:很难回答的问题,通常讲当执行多次相同的查询,查询的参数比较少的时候。

spring

(16)问:spring提供了出方法缓存的其他更多的缓存选择吗?

答:没有,spring或多或少的都会和你的代码拟合

(17)问:方法缓存和Hibernate缓存没有关系

答:spring没有和Hibernate连在一起

(18)问:但是对于方法缓存来说,二级缓存是必须具备的(比如ehcache,同样也被Hibernate使用)

答:二级缓存是Hibernate的概念,如果你想缓存方法,你需要一些重要的缓存,可以使用ehcache,但是必须是线程安全的。

(19)问:方法缓存可以在没有数据库查询的条件下使用吗?

答:spring和Hibernate没有关系,你可以缓存计算结果,这和数据库没有关系

混合

(20)问:如果我在Hibernate中使用了ehcache作为二级缓存,同样在spring中也是使用ehcache,那么我可以使用同一个实例吗?有没有可能混合呢?

答:你或许会使用同一个CacheManager,使用Hibernate一样的缓存配置,只要名字不用,他们就是完全独立的,即使在同一个manager里边。

(21)问:当我使用一级缓存和二级缓存的时候,他们有没有可能混合呢?当查询数据库的时候,结果从哪里来的呢,一级缓存还是二级缓存?一级缓存和二级缓存是一起使用的吗?

答:只要一些抽象不糊泄露,就能正常工作。当你根据主键查询的时候,首先查询一级缓存(更快),其次是二级缓存

(22)问:我使用缓存会导致其他的混合吗?

答:上边抽象可能导致泄露,最坏的情况是数据库更改了而Hibernate不知道


原文地址:http://stackoverflow.com/questions/5405417/caching-with-hibernate-spring-some-questions

参考资料:http://stackoverflow.com/questions/474159/hibernate-second-level-cache-with-spring

http://www.journaldev.com/2980/hibernate-ehcache-second-level-caching-example-tutorial

你可能感兴趣的:(spring,一级缓存,区别,二级缓存,查询缓存)