828下午 mybatis-5 cache(缓存)的使用

mybatis缓存机制

1.一级缓存(本地缓存 sqlsession):即 session 级别的缓存,非全局缓存,或者非二级缓存.
     a.在默认情况下是开启一级缓存的
     b.一级缓存失效的情况
       i.在同一sqlsession中,方法相同,但是传入的实参不一致也会导致一级失效
       ii.sqlsession不相同,也会导致一级缓存失效
       iii.在sqlsession中,执行update/insert/delete都会导致一级缓存失效

2.二级缓存(sqlsessionFactory):它是基于namespace级别的,每一个namespace都会对应到一个二级缓存。

    实现方式:
    a.在mapper标签直接引入<cache></cache>

   b.采用三方 cache 框架, 比如ehcache, oscache 等等.
    
    详解:    
    eviction:设置缓存的回收策略。默认LRU
    • LRU – Least Recently Used: Removes objects that haven't been used for the longst period of time.
               最近最少使用的对象:移除长时间未被使用的对象。
    • FIFO – First In First Out: Removes objects in the order that they entered the cache.
              先进先出:按照进入缓存的顺序来移除对象。
    • SOFT – Soft Reference: Removes objects based on the garbage collector state and the rules of Soft References.
             软引用:根据垃圾回收期和软引用规则来移除对象。
    • WEAK – Weak Reference: More aggressively removes objects based on the garbage collector state and rules of Weak References.
            弱引用:根据垃圾回收期和弱引用规则来移除对象。
            
    flushInterval:刷新时间间隔
        1.设置为正整数,且以毫秒为单位
        2.默认情况下没有设置,不清空缓存
    
    size:表示缓存引用数量,默认情况是1024引用。
    type:指定自定义缓存的全类名。(较少使用)

    
    readOnly:是否只读

        -true:mybatis认为所有从缓存中获取数据的操作都是只读操作,而且还不修改数据。
             mybatis直接从缓存中将数据的引用交给用户,虽然速度快,但是不安全。
        
        -false:读写。mybatis认为数据可能会被修改。
                  mybatis使用序列化与反序列化的机制,复制了一份新的数据给用户。安全,速度慢。

 

代码:
    

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

1.所有在映射文件里的 select 语句都将被缓存。
2.所有在映射文件里 insert,update 和 delete 语句会清空缓存。
3.缓存使用“最近很少使用”算法来回收
4.缓存不会被设定的时间所清空。
5.每个缓存可以存储 1024 个列表或对象的引用(不管查询出来的结果是什么) 。
6.缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用者或线程潜在修改。
缓存元素的所有特性都可以通过属性来修改。比如:

程序代码 程序代码


<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

 

这里cacheEnabled 写不写都没所谓,因为默认是true

 

运行结果

 

采用ehcache框架:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一身正气z

打赏随心就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值