hibernate中一级缓存和二级缓存的具体区别是什么? 同题。hibernate中一级缓存和二级缓存的具体区别是什么?在网上找不到满意的答案,发帖子讨论下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主要的不同是它们的作用范围不同。一级缓存是session级别的。也就是只有在同一个session里缓存才起作用。而二级缓存是sessionFactory级别的。其缓存对同一个sessionFactory生产出来的session都有效。 1.一级缓存是针对session级别的,当这个session关闭后这个缓存就不存在了。2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。 区别:两者的作用范围不同。 这些我知道,想问的是,为什么要设计成这样 ,设计成session级别的和sessionfactory全局级别的? 首先要明白缓存是干什么的,缓存就是要将一些经常使用的数据缓存到内存或者各种储存介质中,当再次使用时可以不用去数据库中查询,减少与数据库的交互,提高性能。再说明一级与二级缓存的作用:一级缓存是Session级别的,也就是说在一个事务中才会启作用。比如在一个事务中同时查询同一个对象,则不会两次去数据库中查询。而二级缓存是sessionFactory级别的,不同的事务之间是可以共享的,有些权限,当用户首次登陆后便将关联的权限放到二级缓存中,这样每次需要权限时就无需再查询数据库了。最后再说明为什么这样设计:一般情况下,我们查询的数据一般是实时的,使用二级缓存肯定不行,使用一级缓存既利用了缓存又不会影响实时。使用二级缓存是为了存储一些比较稳定的数据,如权限,只有在用户修改了权限且重新登录时才能生效。 一级缓存:Session级别的缓存 当Session被open时,缓存即被open 当Session被close时,缓存即被close 在缓存open到close这段时间,多次加载同一个持久化对象,只有第一次向数据库发送SQL语句加载,之后的加载都是基于缓存的 不过Session从打开到关闭的时间很短暂,一般在项目中都是在业务方法开始时打开Session,调用结束后即关闭Session,在如此短暂的瞬间时刻内,多次加载同一个对象的可能性不大,换言之,一级缓存的可用之处也并不大二级缓存:SessionFactory级别的缓存 跟Session同理,level2 cache会随着sessionFactory的打开而打开,关闭而关闭。 但是在一般的应用程序中,sessionfactory会以单例的形式存在,所以在整个应用程序的生命周期里,sessionfactory会一直存在。既二级缓存也一直存在直到关闭应用程序。 二级缓存分为好几种,简单来讲就是类级别的缓存class-cache和查询缓存query-cache. 前者是以id作为缓存的key。 后者是以查询条件作为缓存的key。另外补充一点:在项目中,我们一般不太实用hibernate原生的缓存机制,原因是不好管理。更多时候,我们在业务层使用自己写的cache 1.一级缓存是针对session级别的,当这个session关闭后这个缓存就不存在了。2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。 区别:两者的作用范围不同。 觉得还是去看书上说的。。 一级缓存:O-R映射的数据库实体对象二级缓存:echache,放你自己定义的公参或者其他业务数据 换个角度给你说,CPU有内部的缓存就相当于一级缓存,内存就相当于二级缓存。 jeee项目中的javascript问题,急呀 如何在SSH2框架中,完成用户注册后,创建用户文件夹的功能? JDK5.0字符串转换的问题 Premature end of file错误,高手来帮忙 一个tomcat两个应用出现了一些问题 Spring与Hibernate的优点 [求助]hibernate出现NoClassDefFoundError错误 如何在JBuilder9中使用JDOM 【UNIX】【中软同和】【SCOUNIX培训录像】 Java 获取HTTPS页面内容 springMVC的PathVariable 关于jsp乱码的问题
一级缓存是session级别的。
也就是只有在同一个session里缓存才起作用。
而二级缓存是sessionFactory级别的。
其缓存对同一个sessionFactory生产出来的session都有效。
2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。
区别:两者的作用范围不同。
再说明一级与二级缓存的作用:一级缓存是Session级别的,也就是说在一个事务中才会启作用。比如在一个事务中同时查询同一个对象,则不会两次去数据库中查询。
而二级缓存是sessionFactory级别的,不同的事务之间是可以共享的,有些权限,当用户首次登陆后便将关联的权限放到二级缓存中,这样每次需要权限时就无需再查询数据库了。
最后再说明为什么这样设计:一般情况下,我们查询的数据一般是实时的,使用二级缓存肯定不行,使用一级缓存既利用了缓存又不会影响实时。
使用二级缓存是为了存储一些比较稳定的数据,如权限,只有在用户修改了权限且重新登录时才能生效。
当Session被open时,缓存即被open
当Session被close时,缓存即被close
在缓存open到close这段时间,多次加载同一个持久化对象,只有第一次向数据库发送SQL语句加载,之后的加载都是基于缓存的
不过Session从打开到关闭的时间很短暂,一般在项目中都是在业务方法开始时打开Session,调用结束后即关闭Session,在如此短暂的瞬间时刻内,多次加载同一个对象的可能性不大,换言之,一级缓存的可用之处也并不大二级缓存:SessionFactory级别的缓存
跟Session同理,level2 cache会随着sessionFactory的打开而打开,关闭而关闭。
但是在一般的应用程序中,sessionfactory会以单例的形式存在,所以在整个应用程序的生命周期里,sessionfactory会一直存在。既二级缓存也一直存在直到关闭应用程序。
二级缓存分为好几种,简单来讲就是类级别的缓存class-cache和查询缓存
query-cache.
前者是以id作为缓存的key。
后者是以查询条件作为缓存的key。另外补充一点:在项目中,我们一般不太实用hibernate原生的缓存机制,原因是不好管理。更多时候,我们在业务层使用自己写的cache
2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。
区别:两者的作用范围不同。
觉得还是去看书上说的。。
二级缓存:echache,放你自己定义的公参或者其他业务数据