My Batis缓存
对于一些我们经常查询的并且不经常改变的数据,如果每次查询都要与数据库进行交互,那么大大降低
了效率,因为我们使用缓存,将一些对结果影响不大且经常查询的数据存放在内存中,从而减少与数据
库的交互来提高效率,这就是缓存的优势
MyBatis缓存的分类:
1. 一级缓存:同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况下, 只执行一次 SQL 语句
(前提缓存没有过期)
2. 二级缓存:Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下
的mapper映射文件内容,多个SqlSession共享
一级缓存
同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况下, 只执行一次 SQL 语句(前提缓存
没有过期)
在日志和输出中:
第一次查询发送了 SQL 语句, 后返回了结果;
第二次查询没有发送 SQL 语句, 直接从缓存中获取了结果。
第一次的对象和第二次的对象是相同的
而不同的 SqlSession两次查询都从数据库中取出了数据,虽然结果相同, 但是是两个不同的对象
一级缓存
1. 同一个 SqlSession 中, Mybatis 会把执行的方法和参数通过算法生成缓存的键值, 将键值和结果
存放在一个 Map 中, 如果后续的键值一样, 则直接从 Map 中获取数据;
2. 不同的 SqlSession 之间的缓存是相互隔离的;
3. 用一个 SqlSession , 可以通过代码或配置在查询前清空缓存;
4. insert、update、delete 语句会清空缓存
二级缓存
二级缓存指的是 mybatis中SqlSessionFactory对象的缓存 ,由同一个SqlSessionFactory对象 创
建的SqlSession共享缓存
在配置文件 mybatis-conf.xml 中配置,让mybatis支持二级缓存
在映射配置文件Mapper.xml中 开启支持二级缓存: <cache/>
让当前操作支持二级缓存,在select标签 加上 useCache="true"
在缓存的时候要注意
1. 由于在更新时会刷新缓存, 因此需要注意使用场合:查询频率很高, 更新频率很低时使用, 即经
常使用 select, 相对较少使用insert, update,delete
2. 缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响。但刷新缓存是刷新整个namespace 的缓存, 也就是你 insert, update,delete 了一个, 则整个缓存都刷新了
3. 最好在 「只有单表操作」 的表的 namespace 使用缓存, 而且对该表的操作都在这个namespace 中,否则可能会出现数据不一致的情况
My Batis缓存相关推荐
- My Batis 的XML 映射配置文件详解
My Batis 支持SQL查询,是一些高级映射在持久层的完美展示.他更多的使用简单的XML或注解用于配置和原始映射,摒除了大量的JDBC代码.手工设置参数和结果集封装,提高了开发效率. MyBati ...
- Spring中启用Hibernate二级缓存步骤
1.在applicationContext.xml配置文件中SessionFactory bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...
- Redis 预防缓存穿透“神器” — 布隆过滤器
1. 布隆过滤器 1.1 概念 在架构设计时有一种最常见的设计被称为布隆过滤器,它可以有效减少缓存穿透的情况.其主旨是采用一个很长的二进制数组,通过一系列的 Hash 函数来确定该数据是否存在. 布隆 ...
- 缓存击穿、缓存穿透、缓存雪崩
文章目录 多级缓存架构 缓存击穿 缓存穿透 缓存雪崩 多级缓存架构 在项目架构中,前端发送请求,服务器会先从缓存中获取数据,如果找到数据则直接返回,如果在缓存中没有找到则会去从数据库中获取,数据库取到 ...
- Redis缓存穿透击穿雪崩
目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...
- CPU三级缓存技术解析
CPU三级缓存技术解析 cpu存取数据 cpu存取数据大致可以认为是下图的流程(此处图比较简单) cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cac ...
- Glide的缓存机制
Glide的缓存分为两个模块,一个是内存缓存,一个是硬盘缓存. 内存缓存的作用是防止应用重复将图片数据读取到内存当中: 硬盘缓存的作用是防止应用重复从网络或其他地方下载和读取数据. Glide的缓存K ...
- 内存缓存LruCache的简单使用
LruCache算法(Least Recently Used),也叫近期最少使用算法. 这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并 ...
- 最全面的缓存架构设计
一.缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...
最新文章
- 【 FPGA 】状态机,FPGA的灵魂
- ERROR 1222 (21000): The used SELECT statements have a different number of columns :
- SpringBoot+SweeAlert实现alert提示与前后端数据交互
- 移动平台作业——天气预报——天气数据的获得——为应用申请百度ak码
- 3种纯CSS实现中间镂空的12色彩虹渐变圆环方法
- excel vba 从入门到精通_VBA词汇-基本元素篇
- Androud 如何有效减少重复代码
- 伊万卡·特朗普的迈阿密豪华公寓楼接受加密付款
- 数据分析报告应该包含的内容
- Bailian2700 字符替换【字符串】
- IBM Rational Appscan使用之扫描结果分析
- 牛顿插值 | MATLAB源码
- 微型计算机系统教案,微型计算机硬件系统教案
- flutter ios打包_Flutter 的Android 、iOS 打包
- 浅谈打开网页速度慢的原因和解决方法
- Python pass语句及其作用
- 浅谈CAS,一篇就够了
- 编写一个python程序判断用户输入的8位银行卡_用Python编写的程序,提示用户输入一个由7位数字组成的帐号?...
- 自动添加控件,一次提交多条记录。
- 中国Linux发展前景怎么样?