一、什么是缓存 ---内存中的数据
1.缓存来历:
cpu和磁盘的交互是非常慢的,会有很大的数据差,两者工作时间差距很大
通过内存存储数据,减少和磁盘的交互次数,提高效率
从磁盘加载到内存的数据叫做缓存,磁盘中不会消失,只是写入了内存中
2.什么数据适合当作缓存
经常被查询但不经常被修改的数据适合当作缓存保存在内存
二、mybatis缓存
数据库的数据在磁盘中,如果每次查询都去访问磁盘,效率会非常低,所以mybatis放入了内存中,大大减少了访问时间,提高了效率。
1.一级缓存(sqlSession缓存) ---默认开起
sqlSession对象---执行sql语句的最小单元
从磁盘查询到的数据保存在sqlSession本地缓存中(local cache)
user1和user2是同一个内存地址,说明没用重新创建对象。
如果不是相同的sqlSession对象,就不是同一个地址了,以此证明了是sqlSession缓存。
1.1一级缓存失效的情况
1.使用了不同的sqlSession对象
2.相同的sqlSession对象,但是查询条件不同
3.相同的查询条件中间进行了增删改sql,缓存就会失效
4.手动清除一级缓存 clearCache();
2.二级缓存-sqlSessionFactory缓存--存储的是数据而非对象
2.1、开启步骤
二级缓存中,两个mapper对象执行同一个sql语句,但是地址不同
2.2、映射文件中设置的标签参数
1.eviction--回收策略
LUR:最近最少使用的剔除
FIFO:最开始的最先剔除(先进先出)
软引用
弱引用
2.flushinterval--刷新间隔(毫秒级别)
缓存中的数据进行保证与数据库的数据一致
3.size--引用数目(可以缓存多少数据)默认1024
4.readyOnly--只读(false和true)
3、缓存查询顺序(前提是二级开启)