一级缓存&二级缓存
1|0一级缓存
1|1目标
- 为什么要缓存
- 一级缓存的使用
1|2缓存概述
为什么要使用缓存
如果每次访问数据库都去获取连接,查询数据库的记录,返回结果集,效率比较低。
缓存相当于服务器内存中一块区域,会缓存最近查询的SQL语句以及sql语句的查询结果,如果再次发送相同的SQL语句,mybatis就不再重新访问数据库,而是从内存中读取已经存在的数据返回给客户端。
使用缓存的目的:就是为了提升查询的速度
缓存的分类
在mybatis中缓存分成2类:
- 一级缓存
- 二缓缓存
缓存结构
- 一级缓存是默认打开的,会话级别缓存,只在一个会话中起作用。
- 二级缓存必须是手动开启,可以在各个会话之间共享数据
1|3案例:一级缓存
一级缓存的范围:只在同一个会话中起作用,默认是自动开启的。
需求
通过同一个 sqlSession 对象,通过id查询2次,观察发出 sql 语句的次数。
步骤
- 在同一个测试方法中查询2次
- 输出用户信息
代码
效果
1|4一级缓存的分析
1|5案例:一级缓存的清空
清空的目的:如果进行了增删改的操作,表中的记录有可能发生变化,缓存中的数据就是脏数据。
清空的方式: 只要执行了增删改的操作,提交事务,关闭会话操作会就自动清空一级缓存的数据
需求
- 第一次查询以后,提交会话
- 再进行第二次查询,观察查询结果
代码
效果
1|6小结
-
什么是一级缓存
在同一个会话中起作用
-
如何清除一级缓存
增删改,提交事务,关闭会话
2|0二级缓存
2|1目标
二级缓存的配置和使用
2|2概述
什么是二级缓存?
范围:在多个会话中起作用,如果有2个会话进行相同查询,就会使用缓存。
2|3步骤
- mybatis-config.xml开启二级缓存
- 缓存的实体类要序列化
- 创建UserMapper.xml
- 开启二级缓存
- 编写查询语句
2|4标签作用
- 所有在映射文件里的 select 语句都将被缓存。
- 所有在映射文件里 insert,update 和 delete 语句会清空缓存。
- 缓存使用“最近很少使用”算法来回收
- 每个缓存可以存储 1024 个列表或对象的引用。
- 缓存获取的对象不是共享的且对调用者是安全的,不会有其它的调用者或线程潜在修改。
2|5案例:二级缓存
需求
通过两个 sqlSession 对象,执行两次通过id查询用户,观察发出 sql 语句的次数。
步骤
- 创建一个会话查询1条记录,关闭会话
- 再创建一个会话查询1条记录,关闭会话
- 观察命中的概率
代码
效果
2|6二级缓存分析
- 第1个会话查询完成以后,将查询的结果放在二级缓存中
- 如果有其它的会话进行相同的查询,会直接在二级缓存中读取,不再访问数据库
- 如果有会话执行了增删改,提交事务的方法,就会清空缓存
2|7小结
- 在核心配置文件中开启二级缓存:cacheEnabled=true
- 对缓存实体类序列化
- 在配置文件中开启缓存<cache/>
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/17430108.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库