- [ MyBatis ]

七,Mybatis缓存

2021-01-10  本文已影响0人  好多可乐

Mybatis缓存:

一,定义:

缓存优化指通过数据优化,提高程序执行效率的有效方式。比如我需要查询某个商品的数据,提取了一次之后,我需要再次进行提取。因为mysql是从硬盘读取数据,硬盘读取数据的速度较慢,同时第一次和第二次提取都返回了相同记录,多次提取也不合理。我们可以把第一次查询到的数据放到内存中,到第二次要提取的时候可直接从内存取值,内存取值速度比硬盘的快至少几十倍。

二,Mybatis缓存机制:

  1. 一级缓存默认开启,缓存范围是一个sqlsession会话,范围较小

  2. 二级缓存手动开启,范围属于Mapper Namespace,范围更大

在这里插入图片描述

三,二级缓存运行规则

  1. 二级开启后默认所有查询操作均使用缓存

  2. 写操作commit提交时会对该namespace缓存强制清空,这是为了保证数据的一致性。比如第一个用户得到一个商品叫婴幼儿奶粉,第二个用户把名称给改了,如果此时不清空缓存,第一个用户得到的仍然是婴幼儿奶粉,这样得到的数据和数据库底层得到的就不一致了。

  3. 配置useCache=false可以不用缓存

  4. 配置flushCache=true代表强制清空缓存

四,开启二级缓存

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="goods">
    <!--二级缓存配置-->
    <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
</mapper>

五,缓存的配置

1,二级缓存相关配置的含义

清除策略主要有4种:

1,eviction [ɪˈvɪkʃn] : 缓存的清除策略,当缓存对象达到上限后,会自动触发对应算法对缓存对象进行清除。

2,flushInterval: 缓存的清除间隔,单位为毫秒,可以适当的设置长一些,利用这个选项可有效对内存进行及时回收

例: flushInterval="60000":每隔10分钟自动对缓存进行清除

3,size: 缓存长度,表示当前最多能缓存多少个对象。

在这里插入图片描述

4,readOnly:是否设置成只读

2,其他标签的缓存设置

1,useCache: 是否使用缓存,可以设置true或者false,不推荐selectALL这种查询全局的配置进行使用,因为数据量太大了,会对内存造成很大压力,而且因为list返回数据是多变的,导致命中率较低,设置成false即可。
2,flushCache: 在sql执行后是否强制清空缓存

<insert id="insert" parameterType="com.imooc.mybatis.entity.Goods" useGeneratedKeys="true" flushCache="true">

这里表示插入数据成功后立刻清除缓存

六,缓存的命中率:

比如执行了2次,第一次是从数据库查询,没有使
用缓存,第二次是从缓存提取,这个时候命中率就是0.5,如果查询3次,命中率就是0.66。命中率越高代表缓存使用率越高,对程序优化效果更好。


在这里插入图片描述
上一篇 下一篇

猜你喜欢

热点阅读