在项目中使用mybatis时一般会有二级缓存的问题下面就来介绍下二级缓存。
1.先介绍一级缓存?
一级缓存就是Session级别的缓存。一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。
MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,
当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,
不需要再进行一次数据库查询了。
2.二级缓存?
二级缓存SessionFactory级别的缓存。顾名思义,
二级缓存是SessionFactory(mapper?)级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存(理解:就是如果同一个sessionFactory创建的某个session执行了相同的操作,mybatis就会从二级缓存中拿结果,而不会再去连接数据库,就是查询的时候会把查询结果缓存到二级缓存中。),二级缓存是跨SqlSession的。严格意义上说,SessionFactory缓存分为两类:内置缓存和外置缓存。我们通常意义上说的二级缓存是指外置缓存。
二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同。
简单点说就是一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。因此配置二级缓存将是非常必要的。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。
3.配置二级缓存:
在核心配置SQLMapConfig.xml配置文件中配置:
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
还有关于分布式缓存框架(ehcache)是一个纯Java的进程内缓存框架更多可参考下面的网址。
http://blog.youkuaiyun.com/isea533/article/details/44566257