一级缓存:
是在SqlSession事务中产生缓存机制
缓存查询中的数据、select、还可以对参数不同进行缓存机制
commit或者rollback就会清楚缓存
clearCache() 清除缓存
update,insert,delete 缓存都会清理,重新积累
缓存的目的:
降低数据库的访问量,数据库压力不会那么大。
缓存一种优化方案。
集群:
多服务器
主从数据库,一个负责读一个负责写等。
数据互相进行同步,通常是读的多写的少,所以可一添加多个读取服务。
读之所以比较慢是因为他需要进行数据运算
一级缓存作用域比较窄他只作用与:
一个SqlSession中,在一级缓存中查询,除了第一次加载数据库,在查询就会从内存中查询。
将查询过的放入内存,如果再用的话直接从内存中拿就行,只要查询就会缓存在内存,无论数量。
但是只要执行更新语句就会打破一级缓存,不确定你的更新是否会影响的查询(不确定数据的唯一性)
事务提交缓存也会清除
二级缓存:
1.在mybatis-config.xml中 设置二级缓存开关 true
2.如何让你的select参与二级缓存? 在的mapper.xml写上 <cache>
3.参与缓存,需要把你POJO类 实现序列化接口,以后可能会写入硬盘
本身mybatis中也含有二级缓存组件
ehcache:
1.mapper.xml写上 <cache type="org.mybatis.caches.ehcache.EhcacheCache">
2.加入ehcachejia包:
1.mybatis-ehcache.jar
2.ehcache的实现jar
3.可以在你的源码根目录下 创建ehcache.xml缓存配置
事务关闭他也会有缓存效果除非,发生更新、commit或者rollback就会清楚缓存
二级缓存是全局缓存
需要打开二级缓存,首先要在连接xml文件中,设置一个标记(settings)

public class Stu implements Serializable {
//需要实现一个Serializable接口数据可以保存在磁盘中
}
需要在你的映射文件中添加一个缓存标记
二级缓存默认是开启状态
EhcacheCache缓存:
首先要在映射文件中指定缓存类型
eh缓存在源码包下配置一个xml文件
<ehcache>
<!--<diskStore path="d:\\tempDirectory"/>-->
<!--
name: 设置缓存的名字,它的取值为类的全限定名或类的集合的名字
maxElementsInMemory: 设置基于内存的缓存中可存放的对象最大数目
eternal: 设置对象是否为永久的, true表示永不过期, 此时将忽略timeToIdleSeconds 和 timeToLiveSeconds属性; 默认值是false
timeToIdleSeconds:设置对象空闲最长时间,以秒为单位, 超过这个时间,对象过期。当对象过期时,EHCache会把它从缓存中清除。如果此值为0,表示对象可以无限期地 处于空闲状态。
timeToLiveSeconds:设置对象生存最长时间,超过这个时间,对象过期。如果此值为0,表示对象可以无限期地存在于缓存中.
该属性值必须大于或等于 timeToIdleSeconds 属性值
overflowToDisk:设置基于内存的缓存中的对象数目达到上限后,是否把溢出的对象写到基于硬盘的缓存中
-->
<defaultCache
maxElementsInMemory="1000000000"
eternal="false"
timeToIdleSeconds="30"
timeToLiveSeconds="40"
overflowToDisk="false"
/>
</ehcache>