Mybatis 缓存学习
引用 缓存就是存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些。 1、一级缓存与二级缓存的差异 1)二级缓存默认关闭,一级缓存默认开启,二级缓存以Mapper的namespace为单位,但是一级缓存以sqlsession为单位,如果采用Spring管理对象,那么每次一个事务就会有一个sqlsession。 2)二级缓存的读取都采用了锁控制并发,但是一级缓存并没有,而且Mybatis强调了sqlsession不应该多线程共享,看到这里确实是有道理的,第一个是sqlsession关闭了在使用会报错,其二是读写缓存数据都没有加锁;然而,二级缓存虽然是建立在一级缓存之上,但是二级缓存采用了SynchronizedCache缓存,对数据的读写都进行了加锁,整个二级缓存就是一个责任链模式,从 SynchronizedCache(读写加锁)——>LoggingCache(命中率记录)——>SerializedCache(缓存值序列化、反序列化)——>LruCache(移除无用缓存)——>PerpetualCache(一级缓存,缓存数据的存储); 3)二级缓存采用的Executor是BaseExecutor;二级缓存采用的Executor是CachingExecutor(内部委托BaseExecutor进行数据库操作); 2、一级缓存代码 if