自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 写给 Java 程序员的前端 Promise 教程

我们在 Promise 中写异步任务执行的代码,在上面的案例中,松哥通过 setTImeout 方法模拟了一个耗时操作,异步任务执行完毕后,我们调用 resolve 方法返回调用的结果(会进入到下一步的 then 中),也可以调用 reject 方法表示调用失败(会进入到 catch 中)。这就是前端所谓的回调地狱。就说一句,如果 then 中返回的是一个 Promise 对象,那么接下来的 then 其实是这个 Promise 对象的 then,而不是一开始的 Promise 的 then 了。...

2022-08-08 10:55:26 31

原创 手把手教你用 Jenkins 自动部署 SpringBoot

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。持续集成持续交付持续部署CI/CD 主要针对在集成新代码时所引发的问题(俗称"集成地狱")。为什么会有集成地狱这个“雅称”呢?大家想想我们一个项目部署的过程,拉取代码->构建->测试->打包->部署,如果我们经常需要部署项目,特别是在微服务时代,服务特别多的情况下,不停的测试打包部署,那估计得有个人一整天专门做这事了,而这事又是繁琐的重复无意义的。...

2022-08-04 11:39:12 231 1

原创 松哥手把手教你在 Vue3 中自定义插件

installconsole.log("我的第一个插件")}};install中的方法将会被自动执行。app.use就表示引入插件,引入插件之后,插件中的install方法就会被自动执行。app.use方法接收两个参数,第一个参数就是我们导入的插件js对象,第二个参数是可选的,大家看到插件定义时候的install方法有两个参数,第一个参数是Vue实例,这是自动传入的,第二个参数options则是我们在app.use中,通过第二个参数传入进来的。...

2022-08-02 10:21:52 68

原创 不用Swagger,那我用啥?

这里一个是配置了一个实体类Book,另一个则是配置了一个BookRepository,项目启动成功后,框架会根据Book类的定义,在数据库中自动创建相应的表,BookRepository接口则是继承自JpaRepository,JpaRepository中自带了一些基本的增删改查方法。,这个地址就是这个网页想要渲染的JSON的地址,如果开发者修改了生成的JSONAPI文档的地址,那么就需要手动在这个输入框中输入一下JSONAPI文档的地址。...

2022-07-28 10:45:27 5801 15

原创 手把手教你在 Vue3 中自定义指令

const{==-1;});if(!f){}}})usersPermissions表示当前用户所具备的权限,正常该数据应该是从服务端加载而来,但是我这里简单起见,就直接定义好了。delete']">删除用户="delete']">删除用户"delete']">删除用户="delete']">删除用户''"...

2022-07-25 16:06:28 89

原创 Vue3 中如何加载动态菜单?

这两篇文章主要是和大家说明了后端如何根据当前登录用户,动态生成一个菜单JSON。那么现在的问题就是,当前端收到后端返回来的菜单JSON之后,该如何将之渲染出来?这就是我们目前所面临的问题了。TienChin项目基于RuoYi脚手架来完成,所以本文的分析你也可以看作是对RuoYi-Vue3项目的分析。...

2022-07-20 11:43:29 742 1

原创 一个 Java 猿眼中 Vue3 和 Vue2 的差异

随着TienChin项目视频的录制,松哥终于也要静下心来,认真捋一捋Vue3中的各种新特性了,然后再和小伙伴们进行分享,其实Vue3中还是带来了很多新鲜的玩意,今天我们就不卷Java了,来卷卷前端。以下内容是一个Java猿对Vue3的理解,主要是应用层面上,如果有专业的前端小伙伴,请轻拍。...

2022-07-18 14:33:25 630

原创 Spring Boot+Vue3 动态菜单实现思路梳理

关于SpringBoot+Vue3的动态菜单,松哥之前已经写了两篇文章了,这两篇文章主要是从代码上和大家分析动态菜单最终的实现方式,但是还是有小伙伴觉得没太看明白,感觉缺乏一个提纲挈领的思路,所以,今天松哥再整一篇文章和大家再来捋一捋这个问题,希望这篇文章能让小伙伴们彻底搞清楚这个问题。...

2022-07-15 09:54:20 361 2

原创 Spring 事务失效了,怎么办?

这是小伙伴们在微信上问的一个问题:这个问题比较典型,让我想到面试时有一个 Spring 事务失效的问题,跟这个原因以及解决方案是一模一样的,因此,抽空整篇文章和小伙伴们分享下。小伙伴们知道,AOP 底层就是动态代理,动态代理有两种实现方式:如果被代理的对象有接口,则可以使用 JDK 动态代理,没有接口就可以使用 CGLIB 动态代理。在 Spring 中,默认情况下,如果被代理的对象有接口,就使用 JDK 动态代理,如果被代理的对象没有接口,则使用 CGLIB 动态代理。在 Spring Boot 中,2.

2022-07-12 10:10:30 480

原创 如何在 Spring Security 中自定义权限表达式

在前面的文章中,松哥已经和小伙伴们聊了 Spring Security 中的权限表达式了,还没看过的小伙伴们可以先看下,本文将在前文的基础上继续完善:经过上篇文章的学习,小伙伴们已经知道了,在 Spring Security 中,@PreAuthorize、@PostAuthorize 等注解都是支持 SpEL 表达式的。在 SpEL 表达式中,如果上来就直接写要执行的方法名,那么就说明这个方法是 RootObject 对象中的方法,如果要执行其他对象的方法,那么还需要写上对象的名字,例如如下两个例子:上

2022-07-11 20:11:44 296

原创 Vue 里,多级菜单要如何设计才显得专业?

老生常谈了!虽然我们是 Java 猿,但是写起来前端代码也不含糊!今天我想来和大家聊聊这个前端的动态菜单,要如何设计才显得专业!还是以我们的 TienChin 项目为例,大家一起来看看。先来一张截图看看效果:那么这样的菜单是如何设计出来的呢?今天我也不想和大家聊过多的技术细节,就聊聊这个路由是如何设计的,一旦大家明白了路由是如何设计的,剩下的问题都是细枝末节的问题了。有的小伙伴做过 vhr,知道 vhr 里的动态菜单实现方式,松哥和大家一样,也是在不断学习不断进步中,今天我想和大家探讨 TienChin 项

2022-07-11 20:00:55 1460 5

原创 Spring Security 中,想在权限中使用通配符,怎么做?

小伙伴们知道,在 Shiro 中,默认是支持权限通配符的,例如系统用户有如下一些权限:现在给用户授权的时候,我们可以像上面这样,一个权限一个权限的配置,也可以直接用通配符:这个通配符就表示拥有针对用户的所有权限。当然这是 Shiro 里边的,对 Shiro 不熟悉的小伙伴,可以在公众号后台回复 shiro,查看松哥之前录的视频教程。今天我们来聊聊 Spring Security 中对此如何处理,也顺便来看看 TienChin 项目中,这块该如何改进。要搞明白基于注解的权限管理,那么得首先理解 SpEL,不需

2022-06-28 12:47:13 373

原创 权限想要细化到按钮,怎么做?

首先小伙伴们都知道权限有不同的颗粒度,在 vhr 项目中,整体上我是基于请求地址去处理权限的,这个粒度算粗还是算细呢?有的小伙伴们可能认为这个权限粒度太粗,所谓细粒度的权限应该是基于按钮的。如果有小伙伴们做过前后端不分的开发,应该会有这样的体会:在 Shiro 或者 Spring Security 框架中,都提供了一些标签,通过这些标签可以做到在满足某种角色或者权限的情况下,显示某个按钮;当用户不具备某种角色或者权限的时候,按钮则会自动隐藏起来。但是大家想想,按钮的显示与隐藏不过是前端页面为了提高用户体验而

2022-06-22 15:25:13 753 4

原创 处理接口幂等性的两种常见方案

在上周发布的 TienChin 项目视频中,我和大家一共梳理了六种幂等性解决方案,接口幂等性处理算是一个非常常见的需求了,我们在很多项目中其实都会遇到。今天我们来看看两种比较简单的实现思路。其实接口幂等性的实现方案还是蛮多的,我这里和小伙伴们分享两种比较常见的方案。基于 Token 这种方案的实现思路很简单,整个流程分两步:大致的思路就是上面这样,当然具体的实现则会复杂很多,有很多细节需要注意,松哥之前也专门录过这种方案的视频,小伙伴们可以参考下,录了两个视频,一个是基于拦截器处理的,还有一个是基于 AOP

2022-06-20 17:15:08 631

原创 分布式事务处理方案大 PK

首先先说一个大原则:分布式事务能不用就不要用,毕竟这个用起来还是有一些麻烦的。当然,不用和不会用可是两码事。学习分布式事务,有一些基础理论需要我们先来了解下。本地事务是指将多条语句作为一个整体进行操作的功能,通过数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败,如果事务失败,那么效果就和没有执行这些SQL一样,不会对数据库数据有任何改动。也就是事务具有原子性,一个事务中的一系列操作要么全部成功,要么全部失败。一般来说,事务具有 4 个属性:这四个属性通常称为 ACID 特性。这块松哥之前专

2022-06-20 12:43:03 283 1

原创 分布式事务,原理简单,写起来全是坑

分布式事务,我们已经给小伙伴介绍了整体内容:AT 模式的实现:AT 模式在多数据源中的应用:TCC 模式的实现:今天我们就一起来看下另一种模式,XA 模式!其实我觉得 seata 中的四种不同的分布式事务模式,学完 AT、TCC 以及 XA 就够了,Saga 不好玩,而且长事务本身就有很多问题,也不推荐使用。Seata 中的 XA 模式实际上是基于 MySQL 的 XA 两阶段提交发展出来的,所以学习 XA 模式,需要小伙伴们先理解 MySQL 中的 XA 是怎么一回事,把 MySQL 中的 XA 搞清楚了

2022-06-19 09:51:26 230

原创 进入 SpringBoot2.7,有一个重要的类过期了

今天来聊一个简单的话题~是一个小伙伴在星球上的提问。进入到 SpringBoot2.7 时代,有小伙伴发现有一个常用的类忽然过期了:在 Spring Security 时代,这个类可太重要了。过期的类当然可以继续使用,但是你要是决定别扭,只需要稍微看一下注释,基本上就明白该怎么玩了。我们来看下 WebSecurityConfigurerAdapter 的注释:从这段注释中我们大概就明白了咋回事了。以前我们自定义类继承自 WebSecurityConfigurerAdapter 来配置我们的 Spring S

2022-06-08 15:20:02 584 3

原创 听说 TCC 不支持 OpenFeign?这个坑松哥必须给大家填了

友情提示:本文略长略复杂,但是有配套的视频教程。在前面的文章中,松哥和大家聊了分布式事务框架 seata 的 at 模式,然后有小伙伴评论说 seata 的 tcc 模式不支持 Spring Boot:这。。。必然是支持的呀!我一直觉得网上讲分布式事务的理论很多,案例代码很少,所以咱们今天就整一个例子,一起来把这个捋一捋。相比于上篇文章所聊的 AT 模式,TCC(Try-Confirm-Cancel) 模式就带一点手动的感觉了,它也是两阶段提交的演化,但是和 AT 又不太一样,我们来看下流程。官网上有一张

2022-06-06 20:30:12 295

原创 手把手带领小伙伴们写一个分布式事务案例

这个主要和大家讲了如何通过自定义注解实现多数据源的切换。有小伙伴看完后就提出来问题了,既然这样,那事务怎么办呢?如果在一个 Service 方法中切换了数据源,那么传统的事务解决方案必然失效!特别是在微服务中,这种一个服务中调用多个数据源的事情还很常见。怎么办?对于这个问题,我们可以按照分布式事务的思路去解决。松哥去年其实也写过分布式事务的文章,但是比较粗糙,没有带领小伙伴们通过手写代码去体验分布式事务,这次因为要录制 TienChin 项目视频,而且刚好小伙伴们也提出来这个问题了,所以就认认真真写几篇文章

2022-06-02 14:09:04 472

原创 一文搞明白分布式事务解决方案,真的 so easy

那么今天,我就再来一篇文章,和大家捋一捋这个话题。以下的内容主要围绕阿里的 seata 来和大家解释。首先,来和大家解释一个名词,大家在看分布式事务相关资料的时候,经常会看到一个名词:反向补偿。啥是反向补偿呢?我举一个例子:假设我们现在有三个微服务分别是 A、B、C,现在在 A 服务中分别调用 B 和 C 服务,为了确保 B 和 C 同时成功或者同时失败,我们需要使用到分布式事务。但是按照我们之前对本地事务的理解,B 和 C 中的本地事务,当 B 服务中的事务执行完毕并且提交之后,现在 C 服务中的事务出现

2022-06-02 09:29:04 637

原创 Spring Security 中的权限注解很神奇吗?

最近有个小伙伴在微信群里问 Spring Security 权限注解的问题:很多时候事情就是这么巧,松哥最近在做的 tienchin 也是基于注解来处理权限问题的,所以既然大家有这个问题,咱们就一块来聊聊这个话题。当然一些基础的知识我就不讲了,对于 Spring Security 基本用法尚不熟悉的小伙伴,可在公众号后台回复 ss,有原创的系列教程。1. 具体用法先来看看 Spring Security 权限注解的具体用法,如下:@PreAuthorize("@ss.hasPermi('tien

2022-05-23 10:19:15 686 4

原创 Spring Boot 整合流程引擎 Flowable,so easy

为啥想写 flowable 呢?原因很简单,因为最近在录的 tienchin 项目视频会用到,先写一篇文章和大家打打预防针,后面视频再细讲。流程引擎,也算是一个比较常见的工具了,我们在日常的很多开发中都会用到,当然用的最多的就是 OA 系统了,但是在一些非 OA 系统中,我们也会涉及到,比如一个 CRM 中,可能会有合同管理的需求,合同的审批,也是需要流程引擎的。所以今天我们来简单聊聊流程引擎,顺便写一个简单的例子,小伙伴们一起来感受下流程引擎到底是个啥。1. 流程引擎介绍Flowable 是一个使

2022-05-18 08:42:51 1288

原创 Redis 做接口限流,一个注解的事

Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。。。太多太多了~今天想和小伙伴们聊聊用 Redis 处理接口限流,这也是最近的 TienChin 项目涉及到这个知识点了,我就拎出来和大家聊聊这个话题,后面视频也会讲。1. 准备工作首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而注解是通过 AOP 来解析的,所以我们还需要加上 AOP 的依赖,最终的依赖如下:<dependency&gt

2022-05-17 20:42:38 500 1

原创 吹爆这个Java 结构化数据处理开源库 SPL

现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性、可扩展性以及可移植性,比如火热的微服务就是一种典型。这种架构通常要求业务逻辑要在Java程序中实现,而不是像传统应用架构中放在数据库中。应用中的业务逻辑大都会涉及结构化数据处理。数据库(SQL)中对这类任务有较丰富的支持,可以相对简易地实现业务逻辑。但Java却一直缺乏这类基础支持,导致用Java实现业务逻辑非常繁琐低效。结果,虽然架构上有各种优势,但开发效率却反而大幅下降了。如果我们在Java中也提供有一套完整的结构化数据处理和计

2022-05-16 11:48:58 1573 3

原创 手把手教你玩多数据源动态切换

为了提高应用的可靠性,多数据源现在也很常见,数据库可以搭建双 M 结构,这个松哥之前也发文和大家分享过如何搭建双 M 结构的主从备份?,那么 Java 代码里该如何操作多数据源呢?我在 19 年的时候写过几篇文章教大家配置 JdbcTemplate、MyBatis 以及 JPA 中的多数据源(公众号江南一点雨后台回复 666 有相关的资料),不过那几篇文章的整体思路都是弄多个 Dao 层实例,然后手动选择用哪个实例,这样总感觉不太方便。MyBatis-Plus 也提供了相应的工具,感兴趣的小伙伴可以自行

2022-05-16 08:01:11 924 2

原创 一个简单易用的文件上传方案

现在 OSS 服务算是一个基础服务了,很多云服务厂商都有提供这样的服务,价格也不贵,松哥自己的 www.javaboy.org 用的就是类似的服务。不过对于中小公司来说,除了购买 OSS 服务之外,也可以自己搭建专业的文件服务器,自己搭建专门的文件服务器的话,曾经比较专业的做法是 FastDFS,松哥之前也专门为之录过视频发在 B 站上,感兴趣的小伙伴可以自行查看。不过 FastDFS 搭建比较麻烦,非常容易出错,所以对各位小伙伴来说多多少少有一点门槛。松哥在之前的文章录制的一些项目视频中,如果涉及到文

2022-05-09 19:59:17 529

原创 不能再简单的意向锁

InnoDB 存储引擎支持多粒度锁(multiple granularity locking),也就是允许行锁和表锁共存。当允许行锁和表锁共存的时候,可能会存在下面这样一个问题:例如我执行如下 SQL:这段 SQL 执行完成后,给 id 为 1 的记录加了排他锁。此时,在另外一个会话中,我如果想给这张表再来一个表级共享锁,如下:lock table user read;此时就会有一个问题,共享锁和排他锁是互斥的,要给表上共享锁,就得去检查一下表中的每一条记录都不存在排他锁,如果表中的数据量比较

2022-04-21 18:18:56 660

原创 一个简单易用的文件上传方案

现在 OSS 服务算是一个基础服务了,很多云服务厂商都有提供这样的服务,价格也不贵,松哥自己的 www.javaboy.org 用的就是类似的服务。不过对于中小公司来说,除了购买 OSS 服务之外,也可以自己搭建专业的文件服务器,自己搭建专门的文件服务器的话,曾经比较专业的做法是 FastDFS,松哥之前也专门为之录过视频发在 B 站上,感兴趣的小伙伴可以自行查看。不过 FastDFS 搭建比较麻烦,非常容易出错,所以对各位小伙伴来说多多少少有一点门槛。松哥在之前的文章录制的一些项目视频中,如果涉及到文

2022-04-21 16:30:41 2737 3

原创 MySQL 总是差八个小时,如何破?

今天来聊一个简单的话题,这是一个小伙伴在微信上问我的,对于初学者我非常能理解这类问题带来的困扰,各种尝试,各种搜索,别人说的头头是道,但是就是解决不了自己的问题,今天我简单从两个方面来和大家聊聊这个问题,如果小伙伴们有其他的解决思路,也可以留言一起分享。这个问题我们可以从两方面来分析:MySQL 本身的问题。Java 代码的问题。1. MySQL 本身问题MySQL 本身问题,这个其实很好验证,不就是时间么,我们执行如下 SQL 看看 MySQL 上的时间跟我的电脑时间是否是一致的:sele

2022-04-11 20:37:39 8975 3

原创 如何搭建双 M 结构的主从备份?

关于 MySQL 主从搭建,松哥之前写过好多篇文章了,还录过一个视频。不过之前的都是一主一从的结构,但是小伙伴们知道,我们在项目中,更常见一种结构是双 M 结构,即两个 MySQL 实例,每个 MySQL 实例互为主备,这样在主节点突然断电或者不可用的时候,slave 节点可以很快切换为 master,架构图如下:在这种结构中,两个 MySQL 实例的地位是平等的,互为对方的主备,我们判断谁是主机谁是从机的方式主要是看 readonly,谁是只读的,那谁就是从机,所以这种情况下,主从切换也很方便,只要修

2022-04-08 18:15:19 1685

原创 MySQL 怎么保证备份数据的一致性?

为了数据安全,数据库需要定期备份,这个大家都懂,然而数据库备份的时候,最怕写操作,因为这个最容易导致数据的不一致,松哥举一个简单的例子大家来看下:假设在数据库备份期间,有用户下单了,那么可能会出现如下问题:库存表扣库存。备份库存表。备份订单表数据。订单表添加订单。用户表扣除账户余额。备份用户表。如果按照上面这样的逻辑执行,备份文件中的订单表就少了一条记录。将来如果使用这个备份文件恢复数据的话,就少了一条记录,造成数据不一致。为了解决这个问题,MySQL 中提供了很多方案,我们来逐一进行

2022-04-08 12:47:48 6194 4

原创 MySQL 多表联合查询有何讲究?

今天我们来聊聊微信中的多表联合查询,应该是小表驱动大表还是大表驱动小表?1. in VS exists在正式分析之前,我们先来看两个关键字 in 和 exists。假设我现在有两张表:员工表和部门表,每个员工都有一个部门,员工表中保存着部门的 id,并且该字段是索引;部门表中有部门的 id、name 等属性,其中 id 是主键,name 是唯一索引。这里我就直接使用 vhr 中的表来做试验,就不单独给大家数据库脚本了,小伙伴们可以查看 vhr 项目(https://github.com/lenve

2022-04-07 22:08:50 1203

原创 如何保证缓存和数据库的一致性?

文章目录1. 问题分析2. Cache-Aside2.1 读缓存2.2 写缓存2.3 延迟双删2.4 如何确保原子性3. Read-Through/Write-Through3.1 Read-Through3.2 Write-Through4. Write Behind很多小伙伴在面试的时候,应该都遇到过类似的问题,如何确保缓存和数据库的一致性?如果你对这个问题有过研究,应该可以发现这个问题其实很好回答,如果第一次听到或者第一次遇到这个问题,估计会有点懵,今天我们来聊聊这个话题。1. 问题分析首先我

2022-03-29 18:30:09 1321 2

原创 MySQL 为什么需要两阶段提交?

文章目录1. 什么是两阶段提交1.1 binlog 与 redologbinlogredo log1.2 两阶段提交2. 为什么需要两阶段提交3. 小结为什么要两阶段提交?一阶段提交不行吗?小伙伴们知道,MySQL 中的事务是两阶段提交,我们见到的很多分布式事务也都是两阶段提交的,例如 Seata,那么为什么要两阶段提交呢?一次直接提交了不行吗?今天我们来聊聊这个话题。关于分布式事务 seata,不懂的小伙伴可以参考松哥之前的文章,传送门:五分钟带你体验一把分布式事务!so easy!看了那么多

2022-03-29 12:05:58 2216 1

原创 xxl-job Vs ElasticJob,谁牛?

文章目录1. xxl-job2. 运行 xxl-job3. 开发定时任务3.1 项目创建及配置3.2 定时任务开发方式3.2.1 BEAN 模式(类形式)3.2.2 BEAN模式(方法形式)3.2.3 GLUE 模式(Java)4. 小结前两天写了一篇文章介绍了一下 ElasticJob,有不少小伙伴强烈建议讲讲 xxl-job,其实 ElasticJob 本来就是一个引子,松哥本来就是想和大家分享 xxl-job 的(手动狗头。1. xxl-job松哥也在微信群里和小伙伴们讨论过各自到底用的是 xx

2022-03-28 23:01:12 1260 1

原创 MySQL 表分区?涨知识了

文章目录1. 什么是表分区2. 分区的两种方式2.1 水平切分2.2 垂直切分3. 为什么需要表分区4. 分区实践4.1 RANGE 分区4.2 LIST 分区4.3 HASH 分区4.4 KEY 分区4.5 COLUMNS 分区5. 常见分区命令6. 小结松哥之前写过文章跟大家介绍过用 MyCat 实现 MySQL 的分库分表,不知道有没有小伙伴研究过,MySQL 其实也自带了分区功能,我们可以创建一个带有分区的表,而且不需要借助任何外部工具,今天我们就一起来看看。1. 什么是表分区小伙伴们知道,M

2022-03-27 22:10:07 6211 3

原创 主键索引就是聚集索引?MySQL 索引类型大梳理

文章目录1. 按照功能划分2. 按照物理实现划分2.1 聚集索引2.2 非聚集索引3. 小结之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋一捋这些概念。1. 按照功能划分按照功能来划分,索引主要有四种:普通索引唯一性索引主键索引全文索引普通索引就是最最基础的索引,这种索引没有任何的约束作用,它存在的主要意义就是提高查询效率。普通索引创建方式如下:CREATE TABLE `

2022-03-24 12:04:36 3674

原创 S 锁与 X 锁,当前读与快照读

MySQL 中的锁还是蛮多的,在之前的文章中,松哥和大家介绍过 MySQL 中的 MDL 锁(为什么执行 alter 更新表要慎重?),今天我们再来看看 MySQL 中比较重要的两个锁:S 锁和 X 锁。1. S 锁S 锁,英文为 Shared Lock,中文译作共享锁,有时候我们也称之为读锁,即 Read Lock。S 锁之间是共享的,或者说是互不阻塞的。当事务读取一条记录时,需要先获取该记录的 S 锁。举个例子:事务 T1 对记录 R1 加上了 S 锁,那么事务 T1 可以读取 R1 这一行记

2022-03-21 22:10:45 1396 1

原创 MySQL 主从复制数据不一致,怎么办?

文章目录1. 准备工作1.1 主机配置1.2 从机配置2. 数据不一致问题3. 原因分析4. 问题解决5. 小结今天的文章来晚了,主要是我一觉起来变黄码了,关键是我还不知道,早上 8.20 到了公司楼下,保安要看健康码,当我自信满满的打开粤省事却傻眼了,折腾一早上,绿码总算回来了,真是生活处处有惊喜。。。书接上回,闲话不表。今天来说说 MySQL 主从复制数据不一致的问题,通过几个具体的案例,来向小伙伴们展示 binlog 不同 format 之间的区别。1. 准备工作以下配置基于 Docker

2022-03-17 20:18:21 3140 1

原创 MySQL 的 binlog 的三种格式这么好玩

MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,那么跟我们本文相关的主要是 binlog,另外两个日志松哥将来有空了再和大家详细介绍。1. binlogbinlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这个日志有印象,当我们搭建 MySQL 主从的时候就离不开 binlog(传送门:MySQL8 主从复制踩坑指南)。binlog 是 MySQL Server 层的日志,而不是存储引擎自带的日志,

2022-03-16 13:59:49 425

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