MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)
2022/2/12 2:12:36
本文主要是介绍MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、缓存机制
使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显.
1、缓存原理:Map
■ 查询时,先从缓存区查询:找到,返回数据;找不到:到数据库中查询,然后把查询的数据放进缓存,供下次使用,然后返回数据
■ 缓存是在内存
,速度肯定是比存储在磁盘的数据库更快,减轻数据库的访问压力
2、缓存相关的概念:
(1)哪一些数据适合进行缓存:经常被查询但是很少被修改的数据【读远远大于写操作的数据】
(2)缓存相关的属性:
■ 命中率:从缓存中查询出来的数量占总查询的数量
■ 最大对象数量:缓存区中最多存储多少个数据,超出的时候可以写到硬盘中【序列化】
■ 最大空闲时间:停留在缓存空间的时间,避免出现"占着茅坑不拉。。。"
● 在MyBatis中实现缓存,只需实现Cache接口即可。
3、MyBatis 缓存【一级缓存 和 二级缓存】:
✿ 一级缓存
[本地缓存,默认自动开启,不能关闭,性能提升较差]:SqlSession级别的,每次创建新的SqlSession对象,一级缓存的空间就会发生改变。不同是SqlSession对象不可以共享数据。
✿ 二级缓存
[查询缓存,需要手动开启和配置]:mapper级别的,作用域是mapper文件的同一个namespace。二级缓存应该和namespace绑定在一起,不同是SqlSession对象可以共享数据。
● 默认的缓存是缓存到java的进程(jvm的内存空间)中,若是缓存内容过多,会出现内存溢出(OOM),需要选择第三方的缓存技术,例如redis、ehcache。
3-1、MyBatis中一级缓存的情况:【基于SqlSession
】
■ 一级缓存【本地缓存】,默认开启,不能关闭。
- 好比是在SqlSession中存在一个Map,用来缓存查询出来的对象。
■ 清空一级缓存:调用Sqlsession对象的cleanCache方法。
SqlSession session = MyBatisUtil.getSession(); //清空一级缓存 session.clearCache();
■ 一级缓存:对性能提升是有限的,每一次操作,我们都使用新的SqlSession对象,SqlSession之间不共享一级缓存。
- 真正提升性能---->二级缓存
3-2、MyBatis中二级缓存的情况:
■ 使用二级缓存的步骤:
(1) 全局配置文件中启用二级缓存:
<settings> <!-- 启用二级缓存,缺省是默认启用 --> <setting name="cacheEnabled" value="true"/> </settings>
(2) mapper文件中,使用cache元素,即namespce和缓存进行绑定:
<cache/>
(3)对于要放入二级缓存的对象要实现序列化接口【因为:超出缓存范围的时候可以写到硬盘中【序列化】】
public class Employee implements Serializable{ }
■ 使用二级缓存配置的一些细节(当启用二级缓存后):
(1)mapper文件中所有select元素会默认使用缓存
(2)在大多数情况下,针对列表查询【查询多条数据】,设置为不缓存【useCache="false"】,只有sql和参数相同时,才会使用到缓存:
<!-- mapper 文件--> <select id="listAll" resultMap="BaseResultMap" useCache="false"> select id, name, dept_id from employee2 </select>
(3)一般,对get方法设置缓存查询【useCache="true"】:
<!-- mapper 文件--> <select id="get" resultMap="BaseResultMap" useCache="true"> select id, name, dept_id from employee2 where id = #{id} </select>
(4)默认情况下,insert、delete、update操作都会去刷新缓存,对于删除和更改操作,刷新缓存操作是合理的,但是插入对象操作是没必要刷新缓存的
<insert id="" flushCache="false"> </insert>
4、整合第三方缓存技术
4-1、EhCache:第三方的缓存技术
(1) 依赖【注意看好版本
】:
□ jar包的话---方式一:可以直接在github找到对应的项目,看readme提示去下载 zip包【就包含了所需要的jar包】
□ jar包的话---方式二:到maven仓库下载对应的jar包
- ehcache-core.jar
- mybais-ehcache.jar
- slf4j-api.jar
- slf4j-log4j.jar
(2) ehcache配置:
- ehcache配置文件:ehcache.xml
- 映射文件中通过cache元素的type设置为"org.mybatis.caches.ehcache.EhcacheCache"
<!-- 映射文件中使用Ehcache技术 --> <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
■ 配置好后就可以直接使用啦
4-2、redis缓存中间件:第三方的缓存技术
(1) 安装redis服务 链接:https://github.com/MicrosoftArchive/redis/tags
(2) 依赖【注意看好版本
】:
- mybais-redis.jar
(3) redis配置:
- ehcache配置文件:redis.properties
- 映射文件中通过cache元素的type设置为"org.mybatis.caches.redis.RedisCache"
这篇关于MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识