首先要知道为什么要缓存,我们的项目往往要数据库不会布署在同一个服务器上,那么如果我们的项目要频烦的操作数据库如果没有缓存,速度就会很慢,因为每访问都是一次远程调用,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的简单缓存经供调试,而提供了接口,让众多第三方缓存组件实现