Hibernate的缓存

11 篇文章 0 订阅
7 篇文章 0 订阅
Hibernate 缓存
  缓存就是把数据放在了内存,一些网站访问速度很快,一般都加了缓存,
加了缓存,读取就直接在内存读取。
  对于高并发的网站,一般都采用缓存,当用户保存数据时,缓存组件不会直接
往数据库加数据,而是发个消息给另一个组件,让它来添数据,这样,高并发就可以解决了
但是内存的东西一般不能随便用,一断电内存的数据都没了,所以设计到银行的,债务的
最好不要用缓存,不安全,因为有些时候,数据库的数据变了,缓存没变,就会出现问题




1. 使用缓存原则: 读远远大于写
2. 一级缓存(Map)
   a) 实体对象
   b) 和session的生命周期一样
  一级缓存放的是实体对象,生命周期和session一样
3. 二级缓存(Ehcache)
   a) 实体对象
   b) 和SessionFactory的生命周期一样
  二级缓存一般我们用第三方组件,配置到Hibernate中
  分布式缓存: 比如张三,李四,王五都有缓存,当张三把数据改了,李四,王五的缓存都要得到相应的变化
  怎么做的: 发消息,发广播;
  放到二级缓存的东西,所有的用户都可以拿出来,所以一般用来放一些公共的信息。
  缓存有好也有坏,一般的问题,不用缓存就能解决客户的要求和体验就不要用缓存,毕竟
如果关键性的数据要是用了缓存,万一出现问题会出现脏数据,得不偿失了
4. 查村缓存
   a) 缓存普通属性结果集和实体对象的id
   b) 关联的表发生变化,缓存就消失
  查询缓存存普通属性和对象id,它的生命周期不确定,一旦数据路的表发生了改变,那么
缓存的东西就有可能是脏数据,这时候会吧缓存的东西都清除了。
  缓存实例对象的id:开启了查询缓存, 当From 学生,它会把所有学生的实体放入一级缓存,
如果配置了二级缓存,二级缓存也会放。并且把所有学生的主键id查出来并放入查询缓存中。
当调用query.list()时,由于默认情况下,list会放入缓存,但是不用。由于你配置了查询缓存,它会去查询缓存中找学生的主键
然后在到一级缓存或二级缓存中找对应的实体。


5. 缓存如何实现
   a) 采用Map
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值