缓存机制专题测试
考察知识点
- 一级缓存机制:SqlSession 级别缓存的作用域、生命周期、失效场景
- 二级缓存配置:全局开关与 Mapper 级配置、缓存淘汰策略、实体序列化要求
- 缓存读写策略:只读/读写模式的区别与适用场景、缓存刷新间隔与大小限制
- 自定义缓存实现:Cache 接口规范、装饰器模式、Redis 分布式缓存集成要点
- 缓存脏数据处理:多 Mapper 共享表场景、分布式环境一致性、外部数据变更感知
💡 参考答案在文末
判断题
1
MyBatis 的一级缓存(SqlSession 级别)在 SqlSession 关闭后会被销毁。
2
MyBatis 的二级缓存只需要在 Mapper XML 文件中添加 <cache/> 标签即可开启,不需要修改全局配置。
单选题
3
在 MyBatis 的 Mapper XML 中,<cache/> 标签的 eviction 属性不支持以下哪种策略?
4
关于 MyBatis 一级缓存的描述,以下哪项是错误的?
多选题
5
关于 MyBatis 二级缓存的配置,以下哪些说法是正确的?
6
关于 MyBatis 二级缓存的读写策略,以下哪些说法是正确的?
7
如果要为 MyBatis 实现自定义的二级缓存(例如使用 Redis),需要实现 org.apache.ibatis.cache.Cache 接口。以下哪些方法是该接口必须实现的?
8
以下哪些操作可能导致 MyBatis 二级缓存出现脏数据?
填空题
9
以下哪些操作会导致 MyBatis 一级缓存失效?请填空:
- 执行
sqlSession.____________()方法会清空一级缓存 - 执行
sqlSession.____________()方法会清空一级缓存 - 手动调用
sqlSession.____________()方法可以清空一级缓存 - 关闭
sqlSession.close()会销毁一级缓存
10
在 MyBatis Mapper XML 的 <cache> 标签中,以下属性用于控制缓存刷新策略:
____________属性设置缓存对象的最大数量,超过此数量后按 eviction 策略淘汰____________属性设置缓存自动刷新的时间间隔(毫秒),默认不自动刷新- 如果希望某个 SELECT 语句不使用二级缓存,可在
<select>标签上设置____________="true" - 如果希望某个 UPDATE 语句执行后不清空二级缓存,可在
<update>标签上设置flushCache="false"
11
在 MyBatis 中使用自定义缓存实现时:
- 在 Mapper XML 中通过
<cache type="____________"/>指定自定义缓存类的全限定名 - MyBatis 内置的缓存装饰器
____________可以为缓存添加 LRU 淘汰策略 - MyBatis 内置的缓存装饰器
____________可以为缓存设置定时刷新功能 - 如果需要实现分布式缓存,通常推荐基于
Cache接口进行扩展
12
为了防止 MyBatis 二级缓存出现脏数据,可以通过以下配置进行控制:
- 在
<insert>、<update>、<delete>标签上设置flushCache="____________"可以确保执行写操作后刷新缓存,这是默认行为 - 在
<select>标签上设置useCache="____________"可以强制该查询不使用二级缓存,每次都查询数据库 - 对于涉及同一张表的多个 Mapper,推荐使用
____________属性关联它们,使它们共享同一个缓存实例 - 在多表关联查询中,如果任何一张表的数据发生变化,都应清空相关缓存,可通过设置
flushCache="true"实现
简答题
13
请解释 MyBatis 二级缓存中 readOnly="true" 和 readOnly="false" 两种模式的区别,并说明在什么场景下应该使用哪种模式?
14
MyBatis 二级缓存在什么情况下会产生脏数据?请列举至少三种典型场景,并说明相应的解决方案。
15
如果要将 MyBatis 的二级缓存从默认的 PerpetualCache 替换为 Redis 分布式缓存,请简述需要考虑的关键设计点。
参考答案
1.正确
2.错误
3.D
4.D
5.A;C;D
6.A;C
7.A;B;C;D;E;F
8.A;B
9.commit;rollback;clearCache
10.size;flushInterval;useCache
11.完整类名(如 com.example.MyCache);LruCache;ScheduledCache
12.true;false;cache-ref
13.略
14.略
15.略
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码