在分布式环境下,Mybatis的一级缓存无法集中统一管理,也就是说Mybatis无法搭建分布式缓存。在多个SqlSession环境下,虽然可以使用二级缓存,即全局缓存,以在多个SqlSession共享缓存,但是毕竟是本地存储,还是无法适应分布式的需求。所以为了避免在分布式环境下的脏数据读取,解决方法有两个,
一是可以设置Mybatis一级缓存为STATEMENT级别,因为在查询方法执行的最后,会判断一级缓存级别是否是STATEMENT级别,如果是的话,就清空缓存。如此一来,便相当于不使用一级缓存
在select标签里面设置flushCache="true"即可,也可以如图2配置成全局,但是后面这种方式在一些版本中并不支持。在自己创建SqlSession的时候,每次查询完毕后调用SqlSession类的clearCache()方法也可以清空缓存。Ehcache是一个Java实现的开源分布式缓存框架,EhCache 可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取。同时EhCache 扩展非常简单,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。


