[[421367]]
今天给大家分享一下MyBatis缓存知识介绍,后端s缓希望对大家日常的存知开发当中能有所帮助!
当我们的后端s缓程序MyBatis开启一次和数据库的会话,MyBatis会自动创建出一个SqlSession对象表示这一次数据库的存知会话。在同一个数据库会话当中,识介绍学MyBatis提供了一级缓存的后端s缓方案优化这部分场景,针对相同的存知SQL查询语句,会优先命中一级缓存,识介绍学避免再次对数据库进行查询,后端s缓从而提高查询性能、存知减轻数据库的识介绍学压力。
MyBatis的配置文件加上如下:
- <setting name="localCacheScope" value="SESSION"/>
注意:localCacheScope 值有两个 SESSION(开启一级缓存)/Statement(关闭一级缓存)
一级缓存失效场景
MyBatis一级缓存生命周期是一个SqlSession内部,如果多个 SqlSession 需要共享缓存,则需要开启二级缓存,开启二级缓存后,会使用 CachingExecutor 装饰 Executor,进入一级缓存的查询流程前,先在CachingExecutor 进行二级缓存的查询。
当开启二级缓存数据库查询流程先后顺序为:二级缓存 -> 一级缓存 -> 数据库
二级缓存默认是不开启的,需要手动开启二级缓存,MyBatis的配置文件加上如下:
- <settings>
- <setting name = "cacheEnabled" value = "true" />
- </settings>
然后在还需要在 Mapper 的xml 配置文件中加入
cache属性介绍
eviction:设置回收策略,默认是LRU策略。
flushinterval:缓存刷新间隔,缓存多长时间刷新一次,默认不清空,设置一个毫秒值
readOnly: 是否只读;true 只读,MyBatis 认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。MyBatis 为了加快获取数据,直接就会将数据在缓存中的引用交给用户。不安全,速度快。读写(默认):MyBatis 觉得数据可能会被修改
size : 缓存可存放多少个元素
type: 指定自定义缓存的全类名(实现Cache 接口即可)
blocking:若缓存中找不到对应的key,是否会一直blocking,直到有对应的数据进入缓存。
注意:
这时采用二级缓存可降低数据库访问量,提高数据库的性能,例如:查询耗时较高的统计报表SQL、按固定时间维度查询的SQL(每月的订单信息等等)。
因为任何对数据库的(insert、update、delete)操作都会触发缓存的更新,从而造成缓存失效。
mybatis二级缓存针对大多数的业务系统都不推荐使用,因为业务系统数据操作比较频繁、自带的二级缓存性能也不是很高。二级缓存很难起到实际的作用。可以引用第三方缓存。
个人博客网站:https://programmerblog.xyz
本文转载自微信公众号「IT技术分享社区」,可以通过以下二维码关注。转载本文请联系IT技术分享社区公众号。
责任编辑:武晓燕 来源: IT技术分享社区 MyBatis缓存后端
(责任编辑:热点)
上海机场股票代码 在向sec递交的预约挂号备案文档中 什么时候展现有起色?