针对mybatis的缓存理解

今天看了关于mybatis缓存配置的相关文章,主要有以下理解,

    1、mybatis分别有一级、二级缓存,即已经设定好的缓存模式,其中,一级缓存指每个sqlsession分别有一个缓存,针对相应情况进行数据的缓存,也是默认开启的功能;而针对二级缓存需要在mybatis的sql映射文件中加入<cache />语句开启,并且相应的model类要实现Serializable接口,如果只配置单纯的<cache />标签,其代表的默认配置如下:

    1.所有在映射文件里的 select 语句都将被缓存。
    2.所有在映射文件里 insert,update 和 delete 语句会清空缓存。
    3.缓存使用“最近很少使用”算法来回收
    4.缓存不会被设定的时间所清空。
    5.每个缓存可以存储 1024 个列表或对象的引用(不管查询出来的结果是什么) 。

    6.缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用者或线程潜在修改。

而针对eviction属性,也就是回收算法,还有:

    可用的回收策略有:

  •     LRU – 最近最少使用的:移除最长时间不被使用的对象。
  •     FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  •     SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
  •     WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

    默认的是 LRU。

2、可以采用第三方的cache框架,例如:ehcache、oscache等

首先需要在 mybatis 的官网上下载相关jar 包:https://code.google.com/p/mybatis/ 写文档的时候下载的是:mybatis-ehcache-1.0.2.zip ,里面包括了:

    mybatis-ehcache-1.0.2.jar
    ehcache-core-2.6.5.jar
    slf4j-api-1.6.1.jar

当然,采用ehcache 就必须在 classpath 下 加入ehcache 的配置文件 ehcache.xml:

<cache name="default"
    maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="3600"
    timeToLiveSeconds="10"
    overflowToDisk="true"
    diskPersistent="true"
    diskExpiryThreadIntervalSeconds="120"
    maxElementsOnDisk="10000"

/>

那么在 sql 映射文件中要如何配置呢,参考如下:

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" > 
        <property name="timeToIdleSeconds" value="3600"/><!--1 hour-->
        <property name="timeToLiveSeconds" value="3600"/><!--1 hour-->
        <property name="maxEntriesLocalHeap" value="1000"/>
        <property name="maxEntriesLocalDisk" value="10000000"/>
        <property name="memoryStoreEvictionPolicy" value="LRU"/>
    </cache>


本文参考:https://www.cnblogs.com/dome/p/6838419.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值