自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你只不过是看起来很努力罢了

你只有十分努力才能看起来毫不费力

  • 博客(71)
  • 资源 (1)
  • 收藏
  • 关注

原创 03_快照读实现原理

MySQL 中的 MVCC(Multiversion Concurrency Control)机制通过快照读来实现高并发环境下的事务一致性和隔离性。快照读的实现依赖于一致性视图(Read View)和数据版本链(Version Chain),以确保在事务执行期间读取到的总是同一版本的数据。快照读是一种能无需加锁的读取方式,从而允许读写操作并发执行而不互相阻塞。可以说,快照读是 MVCC 实现的基础,而当前读是悲观锁实现的基础。

2024-11-12 17:08:25 1102

原创 02-1_MVCC版本链清理

MySQL 中的 MVCC 机制通过版本链来管理数据的多版本存储,以支持高并发的读写操作。然而,随着事务的进行,旧版本的数据会不断累积,导致存储空间的浪费。为了避免这种情况,InnoDB 存储引擎实现了自动清理机制来管理和清理不再需要的旧版本数据。MySQL 中的 MVCC 机制通过版本链和回滚段来管理数据的多版本存储。在高并发环境中,Purge 线程的清理工作至关重要。它确保了存储空间的有效利用,同时维持了数据版本的正确性和一致性。

2024-11-12 17:06:17 1265

原创 02_MVCC-版本链管理

MySQL 的 MVCC(Multiversion Concurrency Control,多版本并发控制)机制通过版本链管理来实现数据的多版本存储,从而支持高并发的读写操作。MySQL 中的 MVCC 通过在每行记录中维护额外的系统字段来构建版本链,这使得不同事务可以看到数据的不同版本。版本链的管理涉及到版本的创建、读取版本的可见性判断,以及不再需要的版本的清理。这种机制允许事务并发执行,同时保持一致性和隔离性,是 InnoDB 高效性能的关键所在。

2024-10-16 14:36:08 1146

原创 01_MVCC(多版本并发机制)

MySQL 中的 MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于实现高并发、低冲突数据访问的技术。它通过维护数据的多个版本来实现读写操作的并发控制,它允许多个事务同时对同一数据进行读取和修改,而不会互相干扰,从而实现了非阻塞的读操作,降低了写操作的冲突。MVCC 在 InnoDB 存储引擎中得到了实现,是实现 ACID(原子性、一致性、隔离性、持久性)属性中隔离性的关键。读-读并发读-写并发写-写并发。在没有写的情况下读-读并发。

2024-10-16 14:34:40 1166

原创 10_有了行级锁,RR级别下为什么还会幻读

通过了解间隙锁、临键锁以及临键锁,我们知道行级锁的加锁基本单位是临键锁,而临键锁又是间隙锁和临键锁的组合,这三种锁都可以用来避免幻读的问题,但是 MySQL 在 Repeatable Read(可重复读)这个事务隔离级别下,还是会出现幻读现象,为什么?

2024-09-26 14:07:08 975

原创 09_行级锁的加锁流程

在 MySQL InnoDB 存储引擎中,行级锁主要包括记录锁、间隙锁和临键锁。每种锁在不同的场景下用于确保数据的一致性和完整性。本文主要结合记录锁、间隙锁和临键锁来说明一下行级锁的加锁原理。表级锁会直接锁表,一个事务加了锁,其余事务就要等待,所以表级锁不做过多介绍。记录锁(Record Lock):锁定特定的索引记录。主要用于精确匹配的查询,防止其他事务修改该记录。间隙锁(Gap Lock):锁定索引记录之间的间隙。用于防止其他事务在该间隙中插入新记录,从而避免幻读现象。

2024-09-26 14:05:40 1265

原创 08_AUTO-INC锁

AUTO-INC 锁(Auto-Increment Lock)是 MySQL InnoDB 存储引擎中的一种特殊锁机制,用于处理自增列(AUTO_INCREMENT)在并发环境下的安全性和性能问题。该锁确保多个事务在并发插入自增列时能够生成唯一且连续的自增值。AUTO-INC 锁:是一种表级别的特殊锁,用于保护自增列的递增操作,确保在高并发情况下生成的自增值不重复且有序。自增列(AUTO_INCREMENT):用于自动生成唯一标识符的一种列,每次插入新记录时,该列的值自动递增。AUTO-INC 锁。

2024-09-18 13:19:06 860

原创 07_插入意向锁

插入意向锁是 InnoDB 存储引擎在处理行级锁定时使用的一种特殊类型的锁(特殊的间隙锁),主要用于管理间隙锁(Gap Lock)和行锁(Record Lock)之间的兼容性。它是一种优化机制,使得多个事务能够同时插入同一个间隙(Gap)中的不同位置,而不会彼此阻塞。插入意向锁允许多个事务在同一个间隙中插入不同位置的记录,从而提高并发性能。加锁流程包括查找插入位置、申请插入意向锁、检查锁冲突以及执行插入操作。在同一个间隙中的插入意向锁是兼容的,这意味着多个事务可以在同一个间隙中插入记录而不会相互阻塞。

2024-09-18 13:16:41 768

原创 06-1_间隙锁和临键锁的锁定范围

通过一个示例,理解行级锁、间隙锁和临键锁各自的锁定范围。间隙锁锁定的是范围是一个开区间,临键锁石间隙锁和记录锁的结合,记录锁会锁定相关行的索引,所以记录锁锁定的是一个左开右闭的区间。

2024-09-17 20:25:44 352

原创 优化 OR 条件过多导致的查询超时

在大数据量、高复杂度的查询场景下,简单的OR条件可能导致严重的性能问题。通过合理的查询优化策略,如批量处理、索引优化、使用临时表、以及查询重构,可以显著改善查询性能,避免超时问题。这些优化方法应结合业务需求和实际数据量灵活应用,以确保在维持系统性能的同时满足业务需求。

2024-09-17 20:23:06 1606

原创 06_临键锁

在 MySQL 的 InnoDB 存储引擎中,临键锁实际上是两种锁的结合:记录锁和间隙锁。记录锁是在数据行的索引记录上直接加锁,而间隙锁则锁定索引记录之间的间隙。因此,临键锁锁定的是一个索引记录以及该记录之前的间隙。临键锁通过锁定索引记录以及紧邻索引记录之间的间隙(gap),这样即使是范围查询,也能够确保事务的一致性,防止其他事务对这些范围内的数据进行插入、更新或删除操作。临键锁用于解决幻读现象,确保事务的隔离级别达到可重复读(REPEATABLE READ)。

2024-09-02 10:22:18 1094 1

原创 05_间隙锁

在 MySQL 中,间隙锁(Gap Lock)是 InnoDB 存储引擎的一种特殊类型的行级锁,用于防止幻读现象,确保事务的隔离级别达到可重复读(REPEATABLE READ)。间隙锁主要在范围查询和唯一性检查时使用,它通过锁定索引记录之间的间隙,而不是锁定实际的索引记录或行。它主要用于聚簇索引和辅助索引,防止其他事务在这些间隙中插入新记录,或者防止多个事务同时插入相同的值,从而避免幻读现象。间隙锁只锁定范围,不锁定具体的索引记录对应的行数据,即锁定的区间是开区间(a,b)。

2024-09-02 10:20:59 624

原创 04_记录锁

MySQL 中的记录锁(Record Lock)是行级锁的一种,用于锁定数据库表中的特定行。这种锁是 MySQL InnoDB 存储引擎提供的行级锁机制的一部分,直接作用于存储引擎层面的索引记录上,即锁定单个或多个行记录。这种锁的主要目的是控制对单个数据行的并发访问,从而支持更高级别的事务隔离,并减少数据操作冲突,提高系统的并发能力,保证数据的一致性和完整性。

2024-06-24 10:45:24 489

原创 03_意向锁

MySQL 中的意向锁(Intention Lock)是一种表级锁,用于帮助协调不同粒度的锁(行级锁和表级锁)之间的冲突,优化并发事务的锁管理。意向锁并不会实际阻止行的读写操作,而是用来表明事务接下来要在某些行上加锁,从而提高锁冲突检测的效率。**意向锁在 MySQL 中的作用是优化锁管理,减少锁冲突检测的开销,提升系统的并发性能。**它们在高并发读写场景和行级锁与表级锁混合使用场景中特别有用,通过表明事务的锁意图,使得锁冲突检测更加高效。意向锁本质还是共享锁和排它锁。

2024-06-24 10:44:15 1290

原创 02-1_乐观锁

乐观锁(Optimistic Locking)是一种并发控制机制,适用于高并发和频繁读操作的场景。与悲观锁(Pessimistic Locking)不同,乐观锁在操作数据时假设不会发生并发冲突,因此在读取数据时不加锁,而是在更新数据时检查是否发生冲突。如果发生冲突,则采取相应的措施(如重试操作)。这种策略特别适用于读多写少的场景,因为它减少了锁的开销,提高了系统的吞吐量。

2024-06-07 11:12:00 583

原创 02_共享锁和排他锁

MySQL 中的共享锁和排他锁是两种最基本的锁类型,它们用于控制并发事务对数据库资源的访问(事务隔离),以保证数据一致性和完整性。共享锁,也被称为读锁。共享锁允许多个事务同时读取某一资源(如一行或一张表)的锁,但不允许任何事务修改该资源。排他锁又称写锁,是一种只允许一个事务独占访问某一资源的锁,其他事务不能对该资源加任何类型的锁。

2024-06-07 11:05:19 788

原创 replace into的使用方法

在 MySQL 中,语句是一种用于插入数据的命令,它类似于,但具有不同的行为。具体来说,会首先尝试插入数据。如果插入操作导致主键或唯一键冲突,会删除现有记录并插入新记录。和都可以处理主键冲突问题,但是可以通过语句控制数据修改的粒度更细。和都会检查所有的主键和唯一索引,且不能指定使用哪一个索引。和都会对性能产生一定影响,特别是操作的数据量大的时候。

2024-05-23 15:17:58 884

原创 驱动领域设计(DDD)中聚合根、实体、值对象

在领域驱动设计(Domain-Driven Design,简称DDD)中,实体(Entity)、值对象(Value Object)和聚合根(Aggregate Root)是构成业务模型的核心概念,它们帮助开发者构建出与业务领域紧密相关的模型。下面将分别解释这些概念,并给出定义和示例。实体是拥有唯一标识和连续存在的对象。实体是具有唯一标识符(ID)的对象。即使两个实体的属性完全相同(无法通过几个属性的组合来确定唯一对象),只要它们的ID不同,它们也被视为不同的实体。

2024-05-09 10:13:42 3304

原创 Springboot多数据源及事务实现方案

​ 为了更灵活地控制数据源的选择,通常会定义一个或多个自定义注解(如在业务方法上使用这些注解来指明该方法应当使用的数据源。结合AOP,可以在方法执行前读取这些注解的值,据此动态切换数据源。​ 在多数据源的情况下,具体来说是在一个方法中既使用了数据源 A 又使用了数据源 B 的情况下,事务会失效,即无法实现数据源 A 和数据源 B 同时提交和回滚。​ 事务的具体原理不在本篇作过多的介绍(后面有时间就补一篇),本篇会对比集中实现多数据源事务的方案。

2024-04-25 10:32:19 1579 4

原创 Springboot参数分组校验

Java API规范(JSR303)定义了Bean校验的标准,但没有提供实现。是对这个规范的实现,并增加了校验注解如@Email@Length等。是对的二次封装,用于支持spring mvc参数自动校验。本文基于 JDK21 和 springboot3.1.5 进行整理。

2024-03-14 10:00:21 1048

原创 Spring 事件推送publishEvent

ApplicationContext.publishEvent 是 Spring 提供的解耦的一种方式,在 org.springframework.context 包下。如果项目规模较大,已经引入了 MQ、XxlJob 等中间件,可以使用中间件替代。默认是同步操作的,也就是说发布完之后需要等监听执行完毕才可以;异步需要单独开启,加 @Async 注解即可。事件中需要在构造方法中调用父类的构造方法,将事件源传入。

2024-01-18 13:51:19 1332 1

原创 Spring 异步编程--@Async

Async顾名思义,异步处理。将复杂或耗时长的业务可以进行梳理归纳分为多线程去执行,@Async在使用上会更简单一些。@Async的默认线程池为。spring提供的默认的线程池为。CompletableFuture默认的线程池为。两者均不太满足正常项目的使用,所以使用自定义线程池。只需要实现AsyncConfigurer接口并重写相关方法即可进行自定义配置。import org/*** 自定义线程池*

2024-01-18 11:26:17 966

原创 CentOS8.0搭建 RockerMq

方式一:方式二:查询可安装 java 版本安装 java, 这里安装默认的查看可安装的 maven 版本安装 maven,这里默认校验安装是否成功:编译成功如下:该操作非必须,只是为了方便操作,以下是基于移动之后进行记录的。以下操作均基于编译打包之后的 bin 目录下进行。如果进行了 3.5 操作【移动打包内容】则 bin 目录:/usr/local/rocketmq/bin;如果没进行 3.5 操作【移动打包内容】则 bin 目录:/usr/local/rocketmq/rocketmq-all-5.0.

2022-07-04 10:01:45 594

原创 Java8Stream 流的使用

可以由数组或者集合创建,对流的操作分为两种: 的特性: 可以通过集合或者数组进行创建2. 使用方法用数组创建流3. 使用的静态方法:输出结果: 是顺序流,由主线程按顺序对流执行操作; 是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:由图可以看出,并行流类似于二分查找,如果流中的数据量足够大,并行流可以加快处理速度。除了直接创建并行流,还可以通过 把顺序流转换成并行流:三、Stream 的使用下面代码使用到的类

2022-07-01 17:51:47 603

原创 Java Doc--{@link} 和 @see 使用

在写 Java 代码时,我们可以写代码跳转的注释,我们可以通过【command+鼠标左键】实现跳转,常用的有 {@link} 和 @see。{@link} 前面带有注释仍然可以跳转。主要用法如上,完整路径为【包名.类名#方法名或者字段名】三、 @see@see 前面不可以带有注释, 否则不能跳转主要用法如上,完整路径为【包名.类名#方法名或者字段名】...

2022-06-22 14:22:12 5757 2

原创 Java POI 导入导出 Excel 的方式和区别

Java POI 导出 Excel 的方式和区别文章目录Java POI 导出 Excel 的方式和区别一、 3 种方式1. HSSFWorkbook2. XSSFWorkbook3. SXSSFWorkbook二、 产生 OOM 的原因三、 解决办法四、 项目地址一、 3 种方式1. HSSFWorkbook该方式针对的是 Excel2003 或之前的版本,扩展名为 .xls。该方式的缺陷是只能导出 65535 行数据,超过则会报错,因为此方式导出的数据不会超过 70000 行,所以基本不会发生

2021-05-31 17:29:50 610

原创 eclipse(sts)和Idea安装lombok插件

eclipse/sts&Idea安装lombok插件文章目录eclipse/sts&Idea安装lombok插件1. 下载jar包2. 切到lombok的下载目录,执行命令:java -jar lombok.jar在这里插入图片描述3. 选择要执行的.exe文件在这里插入图片描述4. 安装在这里插入图片描述5. 成功在这里插入图片描述6. 添加依赖7.IDEA安装lombok插件...

2019-12-03 20:19:23 842 2

原创 JSON和对象之间的转换(阿里fastjson)

JSON和对象之间的转换文章目录JSON和对象之间的转换1.引入阿里JSON(com.alibaba.fastjson)的pom依赖2.JSON和JSONObject的关系2-1. JSONObject继承了JSON3.JSON和JavaBean的简单转换3-1. JavaBean-->JSON3-2. JSON-->JSONObject3-3. JSON(JSONObject)--...

2019-11-26 20:31:27 1630 1

原创 前端FreeMarker框架遍历集合

前端FreeMarker框架遍历集合1.在pom文件中引入freemarker的依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gamu7cYB-1571644093128)(D:\03笔记\03Typora笔记截图\freemarker遍历集合\03.png)]2.在控制器中用Model或者ModelAndView对象将参数传入到页面[外链图片转存失败,...

2019-11-06 13:51:25 598

转载 Java连续赋值操作的细节

对于一个连等型的表达式,其在不同位置相同的变量,会因为变量赋值顺序的不同,影响变量的值是否赋值成功,代码如下: public class Test { public static void main(String[] args) { int a=0,b=0; b+=a*=b+=(a=1)/(b=1); System.out...

2018-10-15 09:31:20 7657 4

转载 缺页中断算法(FIFO,LRU)

 1. 缺页中断  在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。   缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:   1. 保护CPU现场   2. 分析中断原因   3. 转入缺页中断处理程序进行处理 ...

2018-09-19 09:30:04 15408 3

原创 Java基础

 Java:面向对象的编程语言    分类:        1)J2SE    JAVASE    --桌面单机版程序        2)J2EE    JAVAEE    --web项目          3)J2ME    JAVAME    --嵌入式的手机程序    特点:        1)跨平台的(一次编写,处处运行)            原理:      ...

2018-09-03 10:56:37 194

原创 Java数组的使用

 数组:引用数据类型,引用类型的数据都存放在堆中(String是引用类型)    数组特点:        1)数据存放在堆中,同一个数组内的元素在一块连续的内存当中(可以通过下标对数组进行定位检索,所以查询效率很高)        2)数组大小是固定的        3)数组创建后会拥有默认值            数组的内存模型:        1)数组是存储多个相同类型变...

2018-09-03 10:55:24 205

原创 Java面向对象(类的封装,继承和多态)

 面向对象:世间万物皆对象:    特性:封装 继承 多态Java回收机制回收的是堆中的垃圾类:    概念:        对一类事物的描述,引用类型,数据在堆中存储    静态性的特征描述:字段    动态性的行为描述:方法    对象(实例):    客观世界中真实存在的,某一类事物的某一个个体    对象的属性分配在堆内存中,但是对象名分配在栈内存中   ...

2018-09-03 10:51:50 288

原创 异常处理

 输出:    标准输出:System.out    错误输出:System.err异常处理:运行时出现的错误    1)try..catch..finally:        try{有可能出现异常的代码} catch(){出现异常时执行的代码} finally{有无错误都要执行的代码}            try之后可以有多个catch,catch的顺序是越具体的类越写前面...

2018-08-28 19:19:51 172

原创 工具类(Object,String,包装类,Math,日期类)

 工具类:    Object:所有类的超类,唯一一个没有父类的类         常用方法:            1)equals();            2)hashCode();            3)toString();            String:不可变字符序列,造成内存浪费        StringBuffer:可变字符序列,节省内存开销  ...

2018-08-28 19:01:59 364

转载 字符串常量池

 1、String 常量池 为了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池。如果字符串已经存在池中,就返回池中的实例引用。如果字符串不在池中,就会实例化一个字符串并放到池中。 Note:常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包...

2018-08-28 18:51:11 358

原创 集合与泛型

 Java中集合框架层次结构:Iterable接口:    Collection接口:    List接口:    Iterator接口:    ListIterator接口:Collection接口:     List接口:        ArrayList类:        LinkedList类:        Vector类:            Stac...

2018-08-28 16:19:23 219

原创 文件、流、序列化

文件:File类 语法: 1)File 变量名 = new File(String pathname); 通过将给定路径名的字符串转换成抽象路径来创建 2)File 变量名 = new File(URI uri); 通过将给定File的uri转换成抽奖路径名来创建 3)File 变量名 ...

2018-08-28 15:25:54 419

原创 多线程

 多线程:    进程:计算机在执行的程序的实体    线程:1个程序内部的顺序控制流        1个进程可以包含1个或多个线程,一个线程就是一个程序内部的一条执行线索        进程和线程的区别:        进程:            每个进程都有独立的代码和数据空间,进程的切换会有很大的开销        线程:            同一类线程共享代码和...

2018-08-28 11:38:34 214

Arc-1.37.0-48361

Arc-1.37.0-48361

2024-04-28

PDManer-mac-v4.9.2

MacOS:PDManer-mac_v4.9.2

2024-04-28

软件工程专业2019毕业设计-购物商城系统.zip

内含毕业论文(知网查重率7.9%),毕业设计手册,英中文翻译,项目源码和数据库文件.

2019-10-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除