Mybatis 二级缓存

来源:互联网 发布:mysql全文检索 编辑:程序博客网 时间:2024/05/22 15:11

一、mybatis 二级缓存

1、mybatis 的一级缓存是SqlSession
2、mybatis 的二级缓存是基于同一命名空间(namespace) mapper
3、mybatis 默认二级缓存未开启、内置是支持二级缓存的。但是由于本身是数据库管理组件、所以缓存并不好用、所以还是要用第三方的缓存机制。典型的:ehcache 。

二、二级缓存的常见算法

  • LRU(Least Recently Used):这种算法是在每个对象中维护一个访问的时间变量,每次访问后,时间都会更新,当新的对象需要存放到缓存时,替换那个按时间排序最后的对象。
  • LFU(Least Frequently Used):这种算法是每个对象记录了对象访问的次数(即命中率),当新的对象需要存放到缓存时,替换那个访问次数最少的对象。
  • FIFO(First In First Out):这种算法是将缓存中的对象存放成一个数组,当新的对象需要存放到内存中是,替换最先存放到缓存的对象。
    三、mybatis 中开启二级缓存

    1、使用mybatis自带的二级缓存

    1.)对象要实现 Serializable 接口
    2.)在mapper.xml映射文件中添加

    <!-- 开启缓存 --><cache/>

    3.)在mybatis-config.xml中添加

    <!-- 开启二级缓存 -->

2、使用第三方缓存(集成ehcache)
1. ) 导入jar包

  • mybatis-ehcache-1.1.0.jar
  • ehcache-2.10.3.jar
  • slf4j-api-1.7.7.jar

2.)生成ehcache.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><ehcache>    <!-- 配置文件缓存溢出后存储位置 -->    <diskStore path="c:/ehcache"></diskStore>    <!--         maxElementsInMemory : 缓存的最多个数         eternal : 对象永久有效、一旦设置为true、那么timeout就无效         timeToIdleSeconds : 设置对象失效前空闲的最大时间、当设置eternal="false"、才能起效         timeToliveSeconds : 设置对象失效前可以存活多少秒、设置0、表示永久有效         overflowToDisk : 溢出时写入硬盘     -->    <defaultCache maxElementsInMemory="100000" eternal="false"     timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"/></ehcache>

3.)在mybatis-config.xml中开启二级缓存
4.)在mapper文件中指定cache类型为ehcache

<!-- 开启二级缓存 -->    <cache type="org.mybatis.caches.ehcache.EhcacheCache" ></cache>
原创粉丝点击