栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

8.mybatis的缓存

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

8.mybatis的缓存

1.一级缓存的使用

一级缓存是sqlsession级别的缓存,默认是存在的。

特性:
     * 1.默认就开启了,也可以关闭一级缓存 localCacheScope=STATEMENT
     * 2.作用域:是基于sqlSession(默认),一次数据库操作会话。
     * 3.缓存默认实现类PerpetualCache ,使用map进行存储的
     * 4.查询完就会进行存储
     * 5.先从二级缓存中获取,再从一级缓存中获取

        key==> hashcode+sqlid+sql

失效情况:
     * 1.不同的sqlSession会使一级缓存失效
     * 2.同一个SqlSession,但是查询语句不一样
     * 3.同一个SqlSession,查询语句一样,期间执行增删改操作
     * 4.同一个SqlSession,查询语句一样,执行手动清除缓存

2.二级缓存

        二级缓存是全局作用域缓存,默认是不开启的,需要手动进行配置。Mybatis提供二级缓存的接口以及实现,缓存实现的时候要求实体类实现Serializable接口,二级缓存在sqlSession关闭或提交之后才会生效(事务提交)。

        二级缓存:
     *    特性:
     *      1.默认开启了,没有实现
     *      2.作用域:基于全局范围,应用级别。
     *      3.缓存默认实现类PerpetualCache ,使用map进行存储的但是二级缓存根据不同的mapper命名空间多包了一层map
     *      : org.apache.ibatis.session.Configuration#caches    key:mapper命名空间   value:erpetualCache.map

              一级缓存的key是localCache
     *          * key==> sqlid+sql
     *      4.事务提交的时候(sqlSession关闭)
     *      5.先从二级缓存中获取,再从一级缓存中获取
     *   实现:
     *      1.开启二级缓存
     *      2.在需要使用到二级缓存的映射文件中加入,基于Mapper映射文件来实现缓存的,基于Mapper映射文件的命名空间来存储的
     *      3.在需要使用到二级缓存的javaBean中实现序列化接口implements Serializable
     *          配置成功就会出现缓存命中率 同一个sqlId: 从缓存中拿出的次数/查询总次数
     *
     *   失效:
     *      1.同一个命名空间进行了增删改的操作,会导致二级缓存失效
     *          但是如果不想失效:可以将SQL的flushCache 这是为false,但是要慎重设置,因为会造成数据脏读问题,除非你能保证查询的数据永远不会执行增删改
     *      2.让查询不缓存数据到二级缓存中,在select中添加属性useCache="false"
     *      3.如果希望其他mapper映射文件的命名空间执行了增删改清空另外的命名空间就可以设置:

                
     *          

mapper文件中添加cache的标签属性


                type="org.mybatis.caches.redis.RedisCache"
            eviction="FIFO"
            flushInterval="60000"
            size="512"
            readonly="false"/>

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号