Mybaits一级缓存和二级缓存分别是什么,区别是什么?

news/2024/7/3 2:30:08

缓存是什么: 
        缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲区中,应用程序从缓冲区读取数据。  
        通俗讲缓存就是要将一些经常使用的数据缓存到内存或者各种储存介质中,当再次使用时可以不用去数据库中查询,减少与数据库的交互,提高性能。

哪些数据会放到缓存:
       通常情况下,会将那些变化较少且经常用到的数据会放到缓存中,比如新闻等等;另外将用户保存到缓存也是一种很好的策略,这样登录的时候就可以极速响应了;
哪些情况下不适合放入缓存:
      经常改变的数据,或者数据的正确与否对最终结果影响很大的。比如商品的库存,股市等等。由于缓存的缺点,得到的数据可能不是最新的,当商品的库存无法实时更新,不仅会对商家造成损失,也会加大与消费者的纠纷;股市数据一旦不是最新的,股民会遭受很大损失。

       

Mybatis 的缓存分为两类,分别是一级缓存和二级缓存。

一级缓存
一级缓存是默认开启的,它在一个sqlSession会话里面的所有查询操作都会保存到缓存中,一般来说一个请求中的所有增删改查操作都是在同一个sqlSession里面的,所以我们可以认为每个请求都有自己的一级缓存,如果同一个sqlSession会话中2 个查询中间有一个 insert 、update或delete 语句,那么之前查询的所有缓存都会清空;

一级缓存工作流程:
 1.将查询的数据缓存在内存中
 2.再次查询时先在缓存空间找看是否由对应的数据
 3.如果有,直接使用缓存空间的数据,不用去数据库查询
 4.如果没有,则去数据库查找相对应数据
 5.将在数据库查到的数据存到缓存空间
 6.将查询结果返回
 7.判断缓存级别是否为STAEMENT级别,如果是的话,清空本地缓存

一级缓存失效的情况:
 1.同一个sqlsession两次查询期间执行了任何一次增,删,改,提交事务等方法时就会清空一级缓存
 2.不同sqlsession对应不同的一级缓存
 3.同一个sqlsession但查询条件不同
 4. 同一个sqlsession两次查询期间手动清除了一级缓存 (sqlSession.clearCache())

二级缓存
二级缓存是全局的,多个请求可以共用一个缓存,二级缓存需要手动开启,有两种方式配置二级缓存,
缓存会先放在一级缓存中,当sqlSession会话提交或者关闭时才会将一级缓存刷新到二级缓存中,开启二级缓存后,用户查询时,会先去二级缓存中找,找不到在去一级缓存中找。


http://lihuaxi.xjx100.cn/news/18504.html

相关文章

详解字符编码与 Unicode

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Linux简单命令之服务控制和安全开关

Linux简单命令之服务控制和安全开关 服务控制安全开关 一、服务控制 systemctl : 系统控制器,用来管理Linux系统的开关机/服务资源运行状态 直接执行 systemctl 列出可以管理的系统资源,包括各种系统服务 控制当前服务的运行状态 systemctl start|stop…

【计算机网络】Web服务器的配置

目录 课题描述 需求分析 2.1 WEB服务器基本构架 2.1.1 WEB服务器和浏览器 2.2 HTTP协议 2.2.1 HTTP简介 2.2.2 HTTP工作原理 2.3 FTP协议 2.3.1 FTP简介 2.3.2 FTP工作原理 2.4 ISS服务作用 概要设计 3.1 ISS服务器的安装与配置 3.2 详细设计 结果分析 4.1 We…

Windows11 VMware上安装适用于编译Android12源代码的Ubuntu虚拟机

一、软件环境 首先下载 VMWare-Workstation下载地址 安装包(自行选择版本下载和安装)其次准备好 Ubuntu 18.04 (Bionic Beaver) 的系统镜像(Google推荐的版本) VMware-workstation-full-16.2.4-20089737.exe(文件615…

Android Studio升级Gradle7.4之后Hilt报错的解决

目录升级Android Studio和Gradle版本Hilt版本升级编译通过,但是运行报错 SAVED_STATE_REGISTRY_OWNER_KEY总结升级Android Studio和Gradle版本 升级到 Android Studio Dolphin | 2021.3.1 版本之后,gradle版本的推荐设置是7.4,于是便一同升级…

在Kafka生产实践中又出问题了

1、背景 最近在折腾Kafka日志集群,由于公司部署的应用不断增加,日志采集程序将采集到的日志发送到Kafka集群时出现了较大延迟,总的TPS始终上不去,为了不影响业务团队通过日志排查问题,采取了先解决问题,再…

【回眸】HighTec编译文件烧录及串口调试

前言 上周烧录完毕后没有串口调试,这周再走一遍流程,编译下载烧录后串口调试。 首先 File→import→General→Existing Project into Workspace导入已经存在的源代码 打开工程目录1ToolEnv→0Build→1Config→ConfigTricoreGnuc→ConfigGnuc.mk&#…

Shell-基础(二):Shell变量、Shell运算符、Shell条件判断、Shell流程控制、函数

三、Shell变量 3.1 系统变量 $HOME、$PWD、$SHELL、$USER等 查看系统变量的值 [rootlocalhost ~]$ echo $HOME /root [rootlocalhost ~]$ 3.2 自定义变量 3.2.1 基本语法 定义变量:变量值撤销变量:unset 变量声明静态变量:readonly变量&…