MyBatis最佳实践:MyBatis 框架的缓存
-
缓存的概念:
- 在内存中临时存储数据,速度快,可以减少数据库的访问次数
- 经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中
-
缓存的级别:
- 一级缓存(默认开启):SqlSession 级别
- 一级缓存存储的是对象
- 二级缓存(默认关闭):nameSpace 级别
- 二级缓存存储的是实际数据
- 一级缓存(默认开启):SqlSession 级别
-
优先访问级:
- 先访问二级缓存,再访问一级缓存,其次是数据库


- 先访问二级缓存,再访问一级缓存,其次是数据库
-
MyBatis 的一级缓存(本地缓存):
- 一级缓存存放在 SqlSession 对象中
- SqlSession 对象来访问数据库
- 在 SqlSessin 对象中有:
- cache:缓存(底层是 HashMap)
- Executor:执行器

- 作用:
- 与数据库同一次会话期间查询到的数据会放入到本地缓存中去
- 如果以后获取相同的数据直接去缓存中拿取,没必要再去查询数据库
- 示例:
- 执行两次方法只进行了一次查询,且为一个对象

- 执行两次方法只进行了一次查询,且为一个对象
-
一级缓存失效:
- 原因:
- SqlSession不同:

- SqlSession相同,查询条件不同:

- SqlSession相同,两次查询之间进行了增删改查操作:

- 手动清除一级缓存:
- session.clearCache():

- session.clearCache():
- SqlSession不同:
- 原因:
-
二级缓存:
- 设置配置:
- 在 xml 中开启二级缓存:
- 使用二级缓存:实现序列化接口
- 目的:把类转换成数据

- 目的:把类转换成数据
- 关闭一级缓存:
//查询信息 List<User> users1 = mapper.findById(6); session.close(); //关闭一级缓存 List<User> users2 = mapper2.findById(6); session.close(); //关闭一级缓存
-
Catch 参数的细节:
- eviction(回收策略):
- LRU(最近最少使用):移除最长时间不被使用的对象,默认值
- FIFO(先进先出):按对进入缓存的顺序来移除
- SOFT(软引用):移除基于垃圾收集处理器状态和弱引用规则的对象
- WEAK(弱引用):更积极地移除基于垃圾收集器状态和弱引用规则的对象
- flushinterval(刷新间隔):
- 可以被设置为任意的正整数,而且他们代表一个合理的毫秒形式的时间段
- 默认情况不设置,即没有刷新间隔,缓存仅仅在调用语句时刷新
- size(引用数目):
- 可以被设置为任意正整数,要记住缓存的对象数目和运行环境可用内存支援数目。默认值时 1024
- readOnly(只读):
- true(只读缓存):会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改,这提供了很重要的性能优势
- false(读写缓存):通过序列化返回缓存对象的拷贝,这种方式会慢一些,但是安全,因此默认是 false
- 配置结果:
<cache eviction="FIFO" flushInterval="6000" size="512" readOnly="true"/>
- eviction(回收策略):
-
MyBatis 缓存查询顺序:
- 先查询二级缓存,因为二级缓存中可能有其他程序查询出来的数据,可以直接拿来用
- 如果二级缓存没有命中,再查询一级缓存
- 如果一级缓存也没有命中,则查询数据库
- SqlSession 关闭之后,一级缓存的数据会写入二级缓存

相关文章:
MyBatis最佳实践:MyBatis 框架的缓存
缓存的概念: 在内存中临时存储数据,速度快,可以减少数据库的访问次数经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 缓存的级别: 一级缓存(默认开启):SqlSession 级别 …...
基于LangGraph、Groq和Tavily打造可以调用外部搜索引擎工具的对话机器人(核心代码 万字详解)
一、python环境 & 相关库版本信息 代码运行在 conda 创建的python环境下,python和相关库的版本信息如下: $ python --version Python 3.12.3$ pip list | grep langchain langchain 0.3.15 langchain-community 0.3.15 lang…...
衡量算法性能的量级标准:算法复杂度
今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…...
PHP校园助手系统小程序
🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…...
如何在Spring Boot项目中高效集成Spring Security
1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...
【PostgreSQL内核学习 —— (WindowAgg(一))】
WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...
PAT甲级-1020 Tree Traversals
题目 题目大意 给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客&…...
LVGL+FreeRTOS实战项目:智能健康助手(Max30102篇)
MAX30102 心率血氧模块简介 功能:用于检测心率和血氧饱和度,集成了红外和红光 LED 以及光电二极管。 接口:支持 I2C 通信,默认 I2C 地址为 0x57。 应用:广泛用于健康监测设备中,如智能手环、手表等。 硬…...
人脸识别【python-基于OpenCV】
1. 导入并显示图片 #导入模块 import cv2 as cv#读取图片 imgcv.imread(img/wx(1).jpg) #路径名为全英文,出现中文 图片加载失败,"D:\picture\wx.jpg" #显示图片 (显示标题,显示图片对象) cv.imshow(read_picture,im…...
redis常用命令和内部编码
文章目录 redis 为什么快redis中的Stringsetsetnxsetex getmsetmget计数操作incr、incrby、decr、decrby、incrbyfloatincrincrbyincrbyfloat 拼接(append)、获取(getrange)、修改字符串(setrange)、获取字符串长度(strlen)操作appendgetrangesetrangest…...
UI操作总结
该类 SolarWebx 继承自 Webx 和 IUixLikeMixin,主要用于扩展 giraffe.EasyUILibrary 的功能,提供了一系列与网页操作、元素定位、截图、图片处理等相关的方法。以下是对该类中每个方法的简要总结: __init__ 方法 作用:初始化 Sola…...
数据结构——实验八·学生管理系统
嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…...
力扣hot100-->滑动窗口、贪心
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...
Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口
在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...
centos哪个版本建站好?centos最稳定好用的版本
在信息化飞速发展的今天,服务器操作系统作为构建网络架构的基石,其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统,凭借其强大的性能、出色的稳定性和丰富的软件包资源,成为众多用户建…...
软件越跑越慢的原因分析
如果是qt软件,可以用Qt Creator Profiler 作性能监控如果是通过web请求,可以用JMeter监控。 软件运行过程中逐渐变慢的现象,通常是因为系统资源(如 CPU、内存、磁盘 I/O 等)逐渐被消耗或软件中存在性能瓶颈。这个问题…...
LeetCode 力扣热题100 二叉树的直径
class Solution { public:// 定义一个变量 maxd,用于存储当前二叉树的最大直径。int maxd 0; // 主函数,计算二叉树的直径。int diameterOfBinaryTree(TreeNode* root) {// 调用 maxDepth 函数进行递归计算,并更新 maxd。maxDepth(root);// …...
【图文详解】lnmp架构搭建Discuz论坛
安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…...
小哆啦解题记:整数转罗马数字
小哆啦解题记:整数转罗马数字 小哆啦开始力扣每日一题的第十四天 https://leetcode.cn/problems/integer-to-roman/submissions/595220508/ 第一章:神秘的任务 一天,哆啦A梦接到了一项任务——将一个整数转换为罗马数字。他心想:…...
【Java数据结构】排序
【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法:挖坑法ÿ…...
Scrapy-Redis队列实现原理深度解析:优先级队列、列表与集合操作的终极指南
Scrapy-Redis队列实现原理深度解析:优先级队列、列表与集合操作的终极指南 【免费下载链接】scrapy-redis Redis-based components for Scrapy. 项目地址: https://gitcode.com/gh_mirrors/sc/scrapy-redis Scrapy-Redis 是一个基于 Redis 的 Scrapy 组件库&…...
DAMOYOLO-S实战教程:对接企业OA系统实现图片自动审核与标注
DAMOYOLO-S实战教程:对接企业OA系统实现图片自动审核与标注 1. 引言:从手动审核到智能自动化的跨越 想象一下这个场景:你是一家电商公司的运营,每天有上千张商品图片需要上传到后台。按照公司规定,每张图片都需要人工…...
Engram:解锁AI潜能,系统优化新高度!
Engram是一种基于LLM的智能体研究者架构,旨在解决系统优化中AI的两个关键局限:进化邻域偏差和连贯性上限。通过将长时程探索与单一上下文窗口解耦,Engram组织一系列智能体迭代设计、测试和分析机制。每次运行结束时,智能体将代码快…...
主流推理引擎选型指南:从ONNX、OpenVINO到TensorRT与ncnn的实战场景解析
1. 主流推理引擎全景概览 第一次接触AI模型部署时,我对着各种推理引擎文档看得一头雾水。直到在真实项目中踩过几次坑才明白,选对推理引擎就像给赛车选轮胎——用错类型再好的引擎也跑不出速度。目前市面上主流的四大推理方案各有绝活:ONNX像…...
FreeRTOS任务切换时,Cortex-M内核的PSP和MSP指针到底怎么变?一个动画讲清楚
FreeRTOS任务切换时Cortex-M内核PSP与MSP指针变化全解析 当你在调试一个嵌入式系统时,突然遇到栈溢出导致的崩溃,那种感觉就像在黑夜里摸索——你知道问题出在哪里,但就是看不清细节。作为一名嵌入式开发者,理解FreeRTOS在Cortex-…...
3大核心技术突破:MediaPipeUnityPlugin如何重塑Unity AI视觉开发边界?
3大核心技术突破:MediaPipeUnityPlugin如何重塑Unity AI视觉开发边界? 【免费下载链接】MediaPipeUnityPlugin Unity plugin to run MediaPipe 项目地址: https://gitcode.com/gh_mirrors/me/MediaPipeUnityPlugin MediaPipeUnityPlugin作为连接G…...
Midscene.js视觉驱动自动化:从认知到实践的AI跨平台控制指南
Midscene.js视觉驱动自动化:从认知到实践的AI跨平台控制指南 【免费下载链接】midscene Let AI be your browser operator. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 一、认知篇:理解Midscene.js的技术革新 1.1 破解传统自动…...
计算机毕业设计springboot智慧校园服务系统 基于SpringBoot的高校智慧校园综合管理平台的设计与实现 基于SpringBoot与微信小程序的数字化校园服务系统的设计与开发
计算机毕业设计springboot智慧校园服务系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着社会的快速发展和信息技术的全面进步,传统的教育教学模式面临着诸多挑…...
从Flamingo到MiniCPM-V 4.5:聊聊那些‘内置’视觉压缩的黑科技,以及我们为什么需要它
从Flamingo到MiniCPM-V 4.5:视觉压缩技术的系统级设计哲学 当一张4K高清图像被拆解成数万个视觉token时,工程师们面对的不仅是算力挑战,更是一场关于信息本质的思辨。为什么Flamingo选择固定64个潜在token?MiniCPM-V 4.5的3D-Res…...
Blender 5.0 插件生态实战指南:从建模到渲染的流程效率革命
1. Blender 5.0插件生态的核心价值 如果你用过Blender,一定遇到过这样的场景:建模时反复手动倒角、UV展开时对着乱七八糟的贴图发呆、渲染时发现场景灯光怎么调都不自然。这些问题在Blender 5.0的插件生态中都能找到优雅的解决方案。 我做了10年三维设计…...
