java 代码
- 首先要知道为什么要缓存,我们的项目往往要数据库不会布署在同一个服务器上,那么如果我们的项目要频烦的操作数据库如果没有缓存,速度就会很慢,因为每访问都是一次远程调用,Socket的创建和销毁,数据的打包和拆包,数据查询命令,网络的延时,等等。
- 那下面说说缓存。缓存就是把数据库的数据在本地建一个备份放进内存。我们在次查找数据库的时候就先去本地内存中查找,这样相对起来,缓存的好处就一目了然了。
- 缓存分为三类
- 事务级缓存
- 相当于一个session.
- 应用级缓存
- sessionFactory,可由多个事务共享也就是由多个sesion共享。
- 分布级缓存
- 多个JVM之间共享
- 目前为止分布级缓存只有EJB做的最好了。Hibernate这一块并不好。
- Hibernate数据缓存
- Hibernate的数据缓存分为两个层次,
- 内部缓存(Session level,也叫一级缓存也叫是事务级缓存)
- 二级缓存(SessionFactory level)
- 内部缓存正常情况下由Hibernate自动维护如果需要手动干预。我们可以通过
- Session.evict;
- 将某个特定对象从内部缓存中清除
- Session.clear
- 清空内部缓存
- 这些都是在没有分布式缓存的情况下使用的。
- 数据库没有被其他应用程序共享。
- 项目没有部署到集群环境中。
- 第三方缓存的实现
- JCS是apache提供的但是在某些情况下可能导致内存泄漏以及死锁
- 常用的是ehcache,相比jcs,ehcache更加稳定并具备更好的缓存调度性能。但是对分布式缓存没有支持。
- 为什么引入第三缓存
- Hibernate本身并没有提供二级缓存的产品化实现,只是提供了一个基于hashtable的简单缓存经供调试,而提供了接口,让众多第三方缓存组件实现
- 文章引用自: