天天看点

一级缓存,二级缓存

一级缓存:

                 是在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>