温州外经贸局网站百度极速版app下载安装
-  
缓存的概念:
- 在内存中临时存储数据,速度快,可以减少数据库的访问次数
 - 经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中
 
 -  
缓存的级别:
- 一级缓存(默认开启):SqlSession 级别 
- 一级缓存存储的是对象
 
 - 二级缓存(默认关闭):nameSpace 级别 
- 二级缓存存储的是实际数据
 
 
 - 一级缓存(默认开启):SqlSession 级别 
 -  
优先访问级:
- 先访问二级缓存,再访问一级缓存,其次是数据库


 
 - 先访问二级缓存,再访问一级缓存,其次是数据库
 -  
MyBatis 的一级缓存(本地缓存):
- 一级缓存存放在 SqlSession 对象中
 - SqlSession 对象来访问数据库
 - 在 SqlSessin 对象中有: 
- cache:缓存(底层是 HashMap)
 - Executor:执行器

 
 - 作用: 
- 与数据库同一次会话期间查询到的数据会放入到本地缓存中去
 - 如果以后获取相同的数据直接去缓存中拿取,没必要再去查询数据库
 
 - 示例: 
- 执行两次方法只进行了一次查询,且为一个对象

 
 - 执行两次方法只进行了一次查询,且为一个对象
 
 -  
一级缓存失效:
- 原因: 
- SqlSession不同:

 - SqlSession相同,查询条件不同:

 - SqlSession相同,两次查询之间进行了增删改查操作:

 - 手动清除一级缓存: 
- session.clearCache():

 
 - session.clearCache():
 
 - SqlSession不同:
 
 - 原因: 
 -  
二级缓存:
- 设置配置:
 - 在 xml 中开启二级缓存:
 - 使用二级缓存:实现序列化接口 
- 目的:把类转换成数据

 
 - 目的:把类转换成数据
 - 关闭一级缓存: 
//查询信息 List<User> users1 = mapper.findById(6); session.close(); //关闭一级缓存 List<User> users2 = mapper2.findById(6); session.close(); //关闭一级缓存
 
 -  
Catch 参数的细节:
- eviction(回收策略): 
- LRU(最近最少使用):移除最长时间不被使用的对象,默认值
 - FIFO(先进先出):按对进入缓存的顺序来移除
 - SOFT(软引用):移除基于垃圾收集处理器状态和弱引用规则的对象
 - WEAK(弱引用):更积极地移除基于垃圾收集器状态和弱引用规则的对象
 
 - flushinterval(刷新间隔): 
- 可以被设置为任意的正整数,而且他们代表一个合理的毫秒形式的时间段
 - 默认情况不设置,即没有刷新间隔,缓存仅仅在调用语句时刷新
 
 - size(引用数目): 
- 可以被设置为任意正整数,要记住缓存的对象数目和运行环境可用内存支援数目。默认值时 1024
 
 - readOnly(只读): 
- true(只读缓存):会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改,这提供了很重要的性能优势
 - false(读写缓存):通过序列化返回缓存对象的拷贝,这种方式会慢一些,但是安全,因此默认是 false
 
 - 配置结果: 
<cache eviction="FIFO" flushInterval="6000" size="512" readOnly="true"/> 
 - eviction(回收策略): 
 -  
MyBatis 缓存查询顺序:
- 先查询二级缓存,因为二级缓存中可能有其他程序查询出来的数据,可以直接拿来用
 - 如果二级缓存没有命中,再查询一级缓存
 - 如果一级缓存也没有命中,则查询数据库
 - SqlSession 关闭之后,一级缓存的数据会写入二级缓存

 
 
