hibernate中一级缓存和二级缓存的具体区别是什么?

sustbeckham 2011-02-13 05:25:24
同题。

hibernate中一级缓存和二级缓存的具体区别是什么?在网上找不到满意的答案,发帖子讨论下。
...全文
8335 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lao_song 2012-10-08
  • 打赏
  • 举报
回复
是不是也太全面了一点吧!起码也要讲细一点咯
archy123 2012-02-21
  • 打赏
  • 举报
回复
换个角度给你说,CPU有内部的缓存就相当于一级缓存,内存就相当于二级缓存。
思灵月 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 psjcarlos 的回复:]

主要的不同是它们的作用范围不同。
一级缓存是session级别的。
也就是只有在同一个session里缓存才起作用。
而二级缓存是sessionFactory级别的。
其缓存对同一个sessionFactory生产出来的session都有效。
[/Quote]


太明了啦~~
ETCentury 2011-02-15
  • 打赏
  • 举报
回复
学些,有更清晰的认识了
jie2workce 2011-02-14
  • 打赏
  • 举报
回复
1.一级缓存是针对session级别的,当这个session关闭后这个缓存就不存在了。
2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。

区别:两者的作用范围不同。


觉得还是去看书上说的。。
heardy 2011-02-14
  • 打赏
  • 举报
回复
一级缓存: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
zcl198715 2011-02-14
  • 打赏
  • 举报
回复
首先要明白缓存是干什么的,缓存就是要将一些经常使用的数据缓存到内存或者各种储存介质中,当再次使用时可以不用去数据库中查询,减少与数据库的交互,提高性能。
再说明一级与二级缓存的作用:一级缓存是Session级别的,也就是说在一个事务中才会启作用。比如在一个事务中同时查询同一个对象,则不会两次去数据库中查询。
而二级缓存是sessionFactory级别的,不同的事务之间是可以共享的,有些权限,当用户首次登陆后便将关联的权限放到二级缓存中,这样每次需要权限时就无需再查询数据库了。
最后再说明为什么这样设计:一般情况下,我们查询的数据一般是实时的,使用二级缓存肯定不行,使用一级缓存既利用了缓存又不会影响实时。
使用二级缓存是为了存储一些比较稳定的数据,如权限,只有在用户修改了权限且重新登录时才能生效。

sustbeckham 2011-02-14
  • 打赏
  • 举报
回复
这些我知道,想问的是,为什么要设计成这样 ,设计成session级别的和sessionfactory全局级别的?
qingyuan18 2011-02-14
  • 打赏
  • 举报
回复
一级缓存:O-R映射的数据库实体对象
二级缓存:echache,放你自己定义的公参或者其他业务数据
xiaofancn 2011-02-14
  • 打赏
  • 举报
回复
缓存就是让数据停留在内存中的一种机制了,一级和二级就是缓存的时间和范围不一样。还可以适当的提高效率呢。
O溺水的鱼0 2011-02-13
  • 打赏
  • 举报
回复
1.一级缓存是针对session级别的,当这个session关闭后这个缓存就不存在了。
2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的。

区别:两者的作用范围不同。
lasthope 2011-02-13
  • 打赏
  • 举报
回复
同意2楼
psjcarlos 2011-02-13
  • 打赏
  • 举报
回复
主要的不同是它们的作用范围不同。
一级缓存是session级别的。
也就是只有在同一个session里缓存才起作用。
而二级缓存是sessionFactory级别的。
其缓存对同一个sessionFactory生产出来的session都有效。
opmic 2011-02-13
  • 打赏
  • 举报
回复
一级缓存为session级别的缓存

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧