1缓存


1. 什么是缓存?

每次连接数据库,很耗资源。

我们把一次查询的结果,给他暂存在一个可以直接取到的地方,一般放在内存里,这就是缓存

我们再次查询相同数据的时候,直接走缓存,不用走数据库了
1. 放在内存中的临时数据
2. 将用户经常查询的数据放到缓存中,用户去查询数据就不用从磁盘上查询,从缓存中查询,从而提高查询效率,结局了高并发系统的性能问题

  1. 为什么使用缓存?

    减少和数据库的交互次数,减少系统开销,提高系统效率

  2. 什么样的数据能使用缓存?

    经常查询并且不经常改变的数据。

1.Mybatis一级缓存

Mybatis定义了两级缓存:一级缓存二级缓存

  • 默认:开启一级缓存(SqlSession级别的缓存,成为本地缓存)
  • 二级缓存需要手动开启,namespace级别
  • mybatis定义了缓存接口Cache

mybati默认使用LRU策略(最久不用的删除)

在一级缓存的情况下:

  1. 调用同一个select,将会缓存
  2. 如果是两个不同的select,不会缓存
  3. 两次相同的select中间如果夹杂增删改,会刷新缓存(因为增删改有可能改变原来的数据)
  4. 如果执行了clearCache则会进行清理缓存
  5. 一级缓存是默认开启的

一级缓存就是一个map

2.Mybatis二级缓存

首先在全局配置文件,开启全局缓存

<setting name="cacheEnabled" value="true"/>

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

在Mapper中加一个标签

<cache/>

机制:

  1. 一个会话查询到一条数据,这个数据就会被放在当前会话的一级缓存中
  2. 当会话结束,一级缓存也关闭了,为了解决这种问题,我们开启二级缓存
  3. 新的会话查询信息,就可以中二级缓存中获取内容

当一个会话(SqlSession关闭了),他会把一级缓存的内容传给二级缓存

缓存原理


会先在二级中查询,然后在一级中查询


醉后不知天在水,满船清梦压星河