Mybatis 缓存


Mybatis 中的缓存

缓存:一段特殊内存区域。

一级缓存

一级缓存是 SqlSession 级别的缓存,默认是开启的。将第一次 sql 语句查询的结果放入到缓存中,第二次如果还发送相同的 sql 语句查询的话,优先从缓存中获取,如果缓存中没有响应的数据,再查询数据库,这样的话,降低数据库的压力,提高系统的性能。

一级缓存在事务提交后,一级缓存数据也会释放,防止数据的脏读。
每个 session 都有自己独立的一级缓存,不能跨 session 访问。


## 二级缓存数据 **二级缓存比一级缓存范围大,跨 session 获取缓存数据。**其实质也是将缓存数据放在 Map 结构中。 在实际企业中,一般会用到缓存框架(ehcache oscache swarmcache)

服务器集群:很多个服务器在一起,响应用户的多个请求。
Ngnix 负载均衡:让服务器均衡的处理用户的多个请求

Mybatis 默认只支持将二级缓存数据保存到单个服务器中,如果在分布式的服务器环境中,就必须用到支持分布式的缓存框架(如 ehcache)

ehcache

不但支持单机缓存,还支持分布式缓存。(适用于服务器集群环境中)

  1. 引入依赖包(ehcache)和中间件()
  2. 启用二级缓存
    <setting name="cacheEnabled" value="true"/>
  3. 类路径下,配置 ehcache.xml
    配置 ehcache 对二级缓存的管理(二级缓存中最大存放的元素数量,间隔访问时间,存活时间,是否永久存放在二级缓存中,是否支持缓存数据往硬盘序列化)
  4. 在 *Mapper.xml 中添加 <cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache> 标签

开启二级缓存后,即使关闭旧的 session,也可以在新的 session 中获取到旧 session 的数据;
二级缓存同一级缓存一样会在事务提交后清空数据,避免脏读;
二级缓存一般用在数据变化不是很快的应用或对数据实时性要求不高的应用中。


文章作者: CrazyBunQnQ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 CrazyBunQnQ !
 上一篇
阿里巴巴 Java 开发手册 阿里巴巴 Java 开发手册
此套 Java 开发手册阿里巴巴 Java 技术团队,近万名阿里 Java 技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了这本高含金量的阿里 Java 开发手册。该手册以 Java 开发者为中心视角,划分为编程规约、异常日
2017-06-16
下一篇 
Struts2 内建拦截器简介 Struts2 内建拦截器简介
Struts 2 中有很多内置拦截器,本文将简单的非常简单的…)介绍各个内置拦截器的作用。
2017-06-08
  目录