首先要知道为什么要缓存,我们的项目往往要数据库不会布署在同一个服务器上,那么如果我们的项目要频烦的操作数据库如果没有缓存,速度就会很慢,因为每访问都是一次远程调用,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的简单缓存经供调试,而提供了接口,让众多第三方缓存组件实现
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9952596/viewspace-566806/ ,如需转载,请注明出处,否则将追究法律责任。