缓存:将数据临时存储在某个位置,可能这个操作并不是必要的,但是,所使用的临时存储的位置,相比原本获取数据的机制要更便于获取数据,所以,从临时位置获取数据的效率会更高一些。
Mybatis框架有2级缓存机制,也就是说,会有2种缓存的做法,分别把数据存储在不同的位置,并且,这2种做法是不同的,分别称之为一级缓存和二级缓存。
无论是一级缓存还是二级缓存,Mybatis的处理流程中最核心的部分都是:执行查询后,将结果缓存下来,如果下次执行相同的查询,将不再连接数据库去查询数据,而是将缓存的结果直接返回!
使用了缓存后,可以避免所有的查询都是向数据库查询数据,从缓存中查询是更加高效的,所以,提高了查询效率,同时,由于减少了数据库的查询量,还在一定程度上保护了数据库,避免数据库因为无法承受高并发而死机!
关于一级缓存,也称之为会话缓存,是Mybatis自动开启的,无法关闭whatsapp网页版,并且,必须保证是同一个会话(SqlSession)、同一个Mapper、同一个查询、相同的参数,才可以使用缓存!并且,当前Mapper执行任何写操作(增、删、改),无论是否真的写了数据(有没有数据发生变化),都会导致Mybatis自动清除缓存中的数据!或者,你也可以显式的调用SqlSession对象的clearCache()方法来手动清除缓存!
关于二级缓存,是基于namespace的,也称之为namespace缓存,在Spring Boot项目中,默认是全局开启的,但是各namespace默认是未开启的。相比一级缓存,namespace缓存并不要求是同一个会话的,无论是哪个会话telegram中文版,只要是执行同一个namespace中的同一个查询,且参数相同,就可以使用此前缓存的结果!在配置SQL语句的XML中,添加标签即可开启当前namespace的二级缓存!另外,在每个标签上都可以配置useCache属性,以表示当前查询是否启用二级缓存,此属性的默认值为true,所以,一旦在XML中添加了标签whatsapp网页版,当前XML中所有的查询都是启用了二级缓存的,如果部分查询不需要使用二级缓存,你应该显式的在标签上配置useCache="false"以禁用二级缓存!当启用二级缓存时,封装查询结果的类型必须实现序列化接口!与一级缓存相同,只要当前namespace执行了任何写操作,都会清除二级缓存!
Mybatis在处理查询时,会优先尝试从二级缓存中获取结果,如果未命中,则会尝试从一级缓存中获取结果,如果仍未命中,将连接到数据库执行查询。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。