论坛首页 Java企业应用论坛

@Transactional-隔离级别-二级缓存的扯谈

浏览 10530 次
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-08  
楼主现在在哪家公司啊?
0 请登录后投票
   发表时间:2011-04-08  
yanwt 写道
楼主现在在哪家公司啊?

私下和你说。
0 请登录后投票
   发表时间:2011-04-09   最后修改:2011-04-09
感觉Hibernate二级缓存用在一个生产系统,特别是有现金流或者物品交换的系统中,可能会带来隐藏问题。

  • 如果全部使用hibernate,只要不是集群基本问题不大。
  • 现实中,生产环境中还是存在直接使用jdbc,这个就导致一些针对hibernate管理的数据缓存策略和内部数据锁机制失效。
  • 呵呵,我现在只用hibernate进行crud,完全不使用二级缓存,性能问题时,根据场景自己做应用级的缓存。
  • 当然了,但对数据要求不严格的时候,还是会使用他——比如给外部做查询服务,结果只是看看,不做业务数据的。


曾经解决过因误用一个问题:
  • 环境:开启Open session in view
  • 问题:某个数据对象经常被误更新,莫名其妙
  • 原因:po到view后,view为了处理方便,把数据规整了下,但是此时po还在受管状态(因为Open session in view),所以数据库也被更改了。
  • 最后:规定所有po都不允许在业务处理之外进行修改。

在使用时需要特别小心。
0 请登录后投票
   发表时间:2011-04-10  
skzr.org 写道
感觉Hibernate二级缓存用在一个生产系统,特别是有现金流或者物品交换的系统中,可能会带来隐藏问题。

  • 如果全部使用hibernate,只要不是集群基本问题不大。
  • 现实中,生产环境中还是存在直接使用jdbc,这个就导致一些针对hibernate管理的数据缓存策略和内部数据锁机制失效。
  • 呵呵,我现在只用hibernate进行crud,完全不使用二级缓存,性能问题时,根据场景自己做应用级的缓存。
  • 当然了,但对数据要求不严格的时候,还是会使用他——比如给外部做查询服务,结果只是看看,不做业务数据的。


现实中,生产环境中还是存在直接使用jdbc,这个就导致一些针对hibernate管理的数据缓存策略和内部数据锁机制失效。

说的好!

引用
数据缓存策略失效
我的理解是因为和jdbc在同一个事务,连接未关闭,未保存到数据库中??为了让jdbc查到数据,必须手动flush session

引用
内部数据锁机制失效
这个不了解了

引用
但对数据要求不严格的时候,还是会使用他——比如给外部做查询服务,结果只是看看,不做业务数据的。

什么叫做对数据要求不严格的时候呢??
什么叫做不做业务数据的??

请赐教
0 请登录后投票
   发表时间:2011-04-10   最后修改:2011-04-10

引用
数据缓存策略失效

org的意思应该是另外的非hibernate管理的JDBC对数据库进行了增删改查的东西。导致缓存失效。
引用
内部数据锁机制失效

这个要org来回答
引用
引用
但对数据要求不严格的时候,还是会使用他——比如给外部做查询服务,结果只是看看,不做业务数据的。

什么叫做对数据要求不严格的时候呢??
什么叫做不做业务数据的??

org的意思是只是查查看,数据准确性要求不高。比方说一个统计功能,缓存里可能有3000个量,但实际数据库有3050个。不过也无所谓,大概对就行。
0 请登录后投票
   发表时间:2011-04-11  
个人猜想ReadOnly=true,也就是不让Spring的事务管理为Connection调用Commit或Rollback而已,或者将IsReadOnly=true,不过Connection的AutoCommit=true了,设置了ReadOnly=true估计也不能提交。
0 请登录后投票
   发表时间:2011-04-12  
@Transactional 灵活性更好,以前都是xml配置,发现对不同的情况要设置各种各样的切点和策略,麻烦死了,而且别人看起来也是晕晕的。
0 请登录后投票
   发表时间:2011-12-28  
LZ这A-C装得有点大了!这readOnly的作用还真和isolation以及二级缓存之类的一点关系都没有!其实只要使用readOnly就知道他有啥效果,如果你在一个方法执行update之类的语句并配置了readOnly为ture,你会惊奇地发现update语句没效果!
如果您使用hibernateTransactionManager的话,设置了readOnly会将session的flushMode设置manual,然后commit事务的时候,会判断如果flushModel不是manual,则执行session的manageFlush,这时才将update等操作真正执行!其实这点开销也不太大
0 请登录后投票
   发表时间:2011-12-31  
rocketball 写道
我有一个不理解的地方,如果设置了ReadOnly=true,那还是什么设置事物的必要,不是增加额外的开销麽

如果设置了readOnly=true,还必须设置propagation=Propagation.SUPPORTS。否则readOnly=true是不起作用的。
看这里,一清二楚。
http://osacar.iteye.com/admin/blogs/1331170
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics