mybaits框架为了能够更加高效的查询数据库中的数据,在查询的时候设置了缓存,具体是怎么回事呢? 一起来学习下吧
mybaits的缓存有两级
一级缓存:缓存在session 中,每个session私有,一定存在。
二级缓存:缓存在session和数据库中的某个位置,可以设置,属于所以session的公共缓存。
mybaits访问数据库的过程示意图如下
每次查询,首先访问session的缓存,拿到数据就返回,然没有就去二级缓存查看,拿到数据就返回没有,就去访问数据库。从数据库拿到数据后,先到二级缓存放一份,再到session缓存放一份。
拿二级缓存数据和session缓存数据的区别在于, 拿到session缓存数据时直接引用,拿到二级缓存的数据时拷贝,克隆, 克隆拿到的数据hashcodehi不一样。
下面我会来演示一下。
第一个hashcode:是从数据库中拿的。
第二个hashcode: 是和第一个hashcode属于同一个session,所以拿的数据师在第一个session缓存中拿到,属于引用。所以前面两个hashcode保存一致
第三哥hashcode:是从二级缓存拿的,克隆,hashcode不一样,同时因为不是从数据库中拿的数据,不缓存。
第四个hashcode:也是在二级缓存中拿的,u也是克隆,hashcode不一样