一级缓存针对SqlSession进行缓存
二级缓存针对mapper进行缓存,不管是不是相同的session,只要mapper的namespace相同,就会共享缓存
那么在同一个session下,执行同一个select语句时,Cache Hit Ratio [Mapper]: 0.0,耳机缓存的命中率为0那?这里要讲解一下二级缓存的缓存什么时候存入了:只有当当前的session.close()时,该session的数据才会存入二级缓存.在同一session下时,肯定没有执行.close()关闭session,自然也就没有存入二级缓存.第二次执行却没有重新发送sql语句,是因为第二次调用的是一次缓存中的数据.
如果想让二级缓存命中率不为0,需要先开启一个session,执行一个sql语句,然后关闭该session,然后在创建一个新的session,执行相同的sql语句,这时,二级缓存才会命中
查询的顺序:
- 二级缓存
- 一级缓存
- 数据库