mybaits提供一级缓存,和二级缓存。
什么是查询缓存?
缓存是介于应用程序和物理数据源之间
mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。
mybaits提供一级缓存,和二级缓存。
一级缓存是sqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap),用于存储缓存数据。不同的sqlSession之间的缓存 区域(HashMap)是互不影响的。
二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql语句,多个SqlSession可以公用二级缓存,二级缓存是跨sqlSession的
mybatis默认支持一级缓存,不需要在配置文件去配置
o 缓存数据失效时机
在表的结构或数据发生改变时,查询缓存中的数据不再有效。有这些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、
DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。
- 可以使用下面三个SQL来清理查询缓存:
1、FLUSH QUERY CACHE; // 清理查询缓存内存碎片。
2、RESET QUERY CACHE; // 从查询缓存中移出所有查询。
3、FLUSH TABLES; //关闭所有打开的表,同时该操作将会清空查询缓存中的内容。
开启二级缓存
第1种: <!--开启mybatis二级缓存-->
- <!--<cache type="com.baizhi.cache.RedisCache"/>-->
- <!--关联关系缓存处理-->
- <cache-ref namespace="com.baizhi.dao.UserDAO"/>
2.mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。
2第一步:在核心配置文件mybatis-config.xml中加入以下代码
1 <!-- 全局参数的配置 -->
2 <settings>
3 <!-- 开启二级缓存 -->
4 <setting name="cacheEnabled" value="true"/>
5 </settings>
- 禁用二级缓存
在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,
默认情况是true,即该sql使用二级缓存。
<select id="findOrderListResultMap" resultMap="ordersUserMap" useCache="false">
- 刷新缓存
在mapper的同一个namespace中,如果有其它insert、update、delete操作数据后需要刷新缓存,如果不执行刷新缓存会出现脏读。
设置statement配置中的flushCache="true" 属性,默认情况下为true即刷新缓存,如果改成false则不会刷新。使用缓存时如果手动
修改数据库表中的查询数据会出现脏读。
如下:
<insert id="insertUser" parameterType="com.mybaits.entity.User" flushCache="true">
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,
提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。
实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间
隔 flushInterval ,比如设置为30分钟、60分钟、24小时等,根据需求而定。
当二级缓存开启后,同一个命名空间(namespace) 所有的操作语句,都影响着一个共同的 cache,也就是二级缓存被多个 SqlSession 共享,是一个全局的变量。当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。
https://www.cnblogs.com/cxuanBlog/p/11333021.html

浙公网安备 33010602011771号