目录
一、什么是缓存
缓存(cache),即数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲区中,应用程序从缓冲区中读取数据。
缓存的特点:
- 缓存的优点:缓存可以让从数据库中取出的数据存在内存当中,需要数据的时候直接在内存中去读取,更加快速便捷。
- 缓存的弊端:虽然读取数据的时候是直接在内存当中去拿比较快速,但是这样拿到的数据依旧是原来的旧数据,很可能读到的不是最新的数据。
缓存的术语:
- 命中:需要的数据在缓存中找到称为命中。
- 未命中:需要的数据在缓存中并未找到,需要重新获取,称为未命中。
缓存的适用性:
- 适合使用缓存:
- 经常查询并且不经常改变的
- 数据的正确性对最终结果影响不大的
比如一个公司的介绍,新闻等
- 不适合使用缓存:
- 经常改变的数据
- 数据的正确性对最终结果影响很大的
比如商品的库存,故事的牌价等
二、什么是mybatis缓存
mybatis包含一个非常强大的查询缓存特性,他可以非常方便的定制和配置缓存,通过缓存减少Java Application与数据库的交互次数,从而提升程序的运行效率。
- 默认情况下一级缓存开启(sqlSession级别的缓存,也称本地缓存)
- 二级缓存需要手动开启,映射器级别的缓存,针对不同的namespace的映射器
- 为了提高扩展性,Mybatis定义了缓存接口Cache,我们可以通过实现Cache接口来自定义二级缓存
1.一级缓存
1.1 一级缓存的配置
Mybatis默认开启了一级缓存,一级缓存有两个级别可以设置:session级别和statement级别。默认是session级别
session级别:即在一个Mybatis会话中执行的所有语句都会共享这一个缓存。
statement级别:可以理解为缓存只对当前执行的这一个statement有效。
我们可以在根配置文件下去配置一级缓存:
<setting name="localCacheScope" value="session">
or
<setting name="localCacheScope" value="statement">