一级缓存,二级缓存

本文详细介绍了MyBatis的一级和二级缓存机制,包括缓存的作用、工作原理及配置方法。并探讨了Ehcache作为二级缓存的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一级缓存:
                 是在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)
                      96e83e1c3d98aaf8d0f4ef85d106a14f74afb74e
           二级缓存不一定在内存中,有可能写硬盘当中,需要实现一个序列化接口,没有序列化就不允许保存在磁盘当中

public class Stu implements Serializable {
    //需要实现一个Serializable接口数据可以保存在磁盘中

}

需要在你的映射文件中添加一个缓存标记
                                   9e80faae152d2b0b51dc655f439dc5be05da2530
二级缓存默认是开启状态

EhcacheCache缓存:
                                首先要在映射文件中指定缓存类型
                                92fe4ae1d048df8c5fab52d1e0ac15a097168846
                                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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值