MyBatis中的缓存和计算机组成原理中的缓存作用一致。都是为了可以减少资源调用,降低查询所需的时间。
打个比方:一次查询的结果,给它暂存在一个可以直接取到的地方。也就是从内存中取到缓存中,进行一个内存 --> 缓存的过程。当我们再次查询相同数据的时候,直接走缓存,不再需要从数据库中查找。
直观一点的说明:缓存就是存在内存中的临时数据
类比计算机组成原理的概念:将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决高并发的性能问题。
使用缓存的优点:减少和数据库的交互次数,减少系统开销,提高系统效率。
那什么样的数据才能使用缓存?
答:经常查询且并不经常改变的数据。
- 一级缓存
- 二级缓存
- 缓存原理
- 自定义缓存
该缓存默认开启,且仅在一次 SqlSession 会话中有效,也就是拿到连接到关闭连接的时间段。
它仅仅对一个会话中的数据进行缓存。
就是一个Map集合。
二级缓存要启用全局的二级缓存,只需要在你的SQL映射文件中添加一行
< cache />
为何要使用二级缓存及二级缓存的工作机制如下图所示:
实现步骤:
- 开启全局缓存(mybatis-config.xml)
- 在要使用二级缓存的Mapper接口中开启
- 测试
- 可能出现的问题:
该错误为:要将实体类序列化,否则报错。
注意事项:
- 只要开启了二级缓存,在同一个Mapper下就有效
- 所有的数据都会先放在一级缓存中
- 只有当会话提交或关闭时,才会提交到二级缓存中(转存)
原理如上图。
Ehcache是一种广泛使用的开源Java分布式缓存
主要面向通用缓存。
要在程序中使用Ehcache,需要导包。



