021.Mybatis的二级缓存---(2)

1.缓存清除策略中的参数详解

 <!--开启了二级缓存
      eviction是缓存的清除策略,当缓存对象数量达到上限后,自动触发对应算法对缓存对象清除
          1.LRU – 最近最久未使用:移除最长时间不被使用的对象。
          O1 O2 O3 O4 .. O512
          14 99 83 1     893
          2.FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
          3.SOFT – 软引用:移除基于垃圾收集器状态和软引用规则的对象。
          4.WEAK – 弱引用:更积极的移除基于垃圾收集器状态和弱引用规则的对象。
  -->
    <cache eviction="LRU" flushInterval="600000" size="512" readOnly="true"/>
eviction:缓存的回收策略
 LRU - 最近最少使用,移除最长时间不被使用的对象
 FIFO - 先进先出,按对象进入缓存的顺序来移除它们
 SOFT - 软引用,移除基于垃圾回收器状态和软引用规则的对象
 WEAK - 弱引用,更积极地移除基于垃圾收集器和弱引用规则的对象
 默认的是LRU 
flushInterval:缓存刷新间隔
 缓存多长时间清空一次,默认不清空,设置一个毫秒值
readOnly:是否只读
 true:只读:mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
   mybatis为了加快获取数据,直接就会将数据在缓存中的引用交给用户 。不安全,速度快
 false:读写(默认):mybatis觉得获取的数据可能会被修改
 mybatis会利用序列化&反序列化的技术克隆一份新的数据给你。安全,速度相对慢
size:缓存存放多少个元素
type:指定自定义缓存的全类名(实现Cache接口即可)

2.在SQL语句中的应用(goods.xml)

    <!--useCache="false"代表不使用缓存-->
    <select id="selectAll" resultType="com.imooc.mybatis.entity.Goods" useCache="false">
        select *
        from t_goods
        order by goods_id desc limit 10
    </select>
<!-- flushCache="true"代表sql执行后立即清空缓存-->
<insert id="insert" parameterType="com.imooc.mybatis.entity.Goods" useGeneratedKeys="true" keyProperty="goodsId"
keyColumn="goods_id" flushCache="true">
<!--不用添加主键,主键是自动生成的编号 selectkey-->
INSERT INTO t_goods(title, sub_title, original_cost, current_price, discount, is_free_delivery, category_id)
VALUES (#{title} , #{subTitle} , #{originalCost}, #{currentPrice}, #{discount}, #{isFreeDelivery},
#{categoryId})
</insert>

3.MyBatis的flushCache和useCache的使用

(1)当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
useCache默认为true,表示会将本条语句的结果进行二级缓存。
(2)当为insert、update、delete语句时:

flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。

useCache属性在该情况下没有。

当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置,修改结果类似下面:

<select id="save" parameterType="XX" flushCache="true" useCache="false">
    ……
</select>
update 的时候如果 flushCache="false",则当你更新后,查询的数据数据还是老的数据。

 

posted @ 2022-11-12 18:41  李林林  阅读(74)  评论(0编辑  收藏  举报