最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

大厂面试题:介绍一下MyBatis的缓存机制

XAMPP新闻 admin 71浏览 0评论

一、得分点 

一、二级缓存概念

二、标准回答 

一级缓存也称为本地缓存,它默认启用且不能关闭。一级缓存存在于于SqlSession的生命周期中,即它是SqlSession级别的缓存。在同一个 SqlSession 中查询时,MyBatis 会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中。如果同一个SqlSession 中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map缓存对象中己经存在该键值时,则会返回缓存中的对象。 

二级缓存存在于SqlSessionFactory 的生命周期中,即它是SqlSessionFactory级别的缓存。若想使用二级缓存,需要在如下两处进行配置: 

– 在MyBatis 的全局配置settings 中有一个参数cacheEnabled,这个参数是二级缓存的全局开关,默认值是true ,初始状态为启用状态。 

– MyBatis 的二级缓存是和命名空间绑定的,即二级缓存需要配置在Mapper.xml 映射文件中。在保证二级缓存的全局配置开启的情况下,给Mapper.xml 开启二级缓存: 

二级缓存具有如下效果: 

– 映射语句文件中的所有SELECT 语句将会被缓存。 

– 映射语句文件中的所有时INSERT、UPDATE、DELETE语句会刷新缓存。 

– 缓存会使用Least Recently U sed ( LRU ,最近最少使用的)算法来收回。 

– 根据时间表(如no Flush Interval ,没有刷新间隔),缓存不会以任何时间顺序来刷新。 

– 缓存会存储集合或对象(无论查询方法返回什么类型的值)的1024 个引用。 

– 缓存会被视为read/write(可读/可写)的,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。 

加分回答 

Mybatis 一级缓存失效的四种情况: 

– sqlsession变了 缓存失效 

– sqlsession不变,查询条件不同,一级缓存失效 

– sqlsession不变,中间发生了增删改操作,一级缓存失败 

– sqlsession不变,手动清除缓存,一级缓存失败 

MyBatis的二级缓存相对于一级缓存来说,实现了SqlSession之间缓存数据的共享,同时粒度更加的细,能够到namespace级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。 

MyBatis在多表查询时,极大可能会出现脏数据,这导致安全使用二级缓存的条件比较苛刻。由于默认的MyBatis Cache实现都是基于本地的,这导致在分布式环境下,一定会出现读取到脏数据的情况,且开发成本较高,所以开发环境中一般都会直接使用Redis,Memcached等分布式缓存。

转载请注明:XAMPP中文组官网 » 大厂面试题:介绍一下MyBatis的缓存机制

您必须 登录 才能发表评论!