- 博客(29)
- 收藏
- 关注
原创 order by的工作流程
在日常的业务开发中,使用到MySQL的order by对数据进行排序是一个很正常的行为,那么你知道order by是如何工作的嘛?
2024-04-15 13:57:09
1143
原创 count(?)为什么越来越慢?
在日常的业务开发中,汇总记录使用是常见用法,分页查询的时候都会用到,那么随着系统记录的数量越来越多,你有没有发现这条语句执行的也越来越慢了呢?
2024-04-12 14:25:54
795
原创 表数据删除了一半,表文件大小却不变?MySQL删除执行流程
本文讨论的就如题目所示,为什么在 MySQL 中,把表数据删除了一半,表文件大小却不变的?以下讨论前提都是使用InnoDB存储引擎,使用DELETE删除,并非。
2024-04-11 10:41:34
1891
原创 MySQL全局锁,表锁,行锁介绍
数据库锁设计的初衷是处理并发问题,作为多用户共享的资源,当出现并发访问的时候,数据库需要合理的控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构根据加锁的范围,MySQL 里的锁大概可以分为全局锁,表级锁,行锁三类
2024-04-09 16:51:26
1020
原创 MVCC多版本并发控制
可重复读的核心就是一致性读,而事务更新数据的时候,只能用当前读如果当前记录的行锁被其他事务占用的话,就需要进入锁等待在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。
2024-04-02 16:16:13
406
原创 MySQL事务隔离级别
在不同的隔离级别下,数据库行为是不同的,Oracle数据库默认隔离级别是读已提交MySQL默认隔离级别是可重复读,如果存在 Oracle 迁移到 MySQL,为保证数据库隔离级别一致,需要将 MySQL 的隔离级别改成读已提交MySQL 配置的方式是,将启动参数的值设置成,可以使用来查看当前隔离级别正常情况下,为了保证效率,我们一般都会把事务隔离级别调整成读已提交,那么什么时候需要可重复读的场景呢?大多数在做数据校对的时候,不希望有其他事务来干扰数据,启动可重复读是很方便的。
2024-04-02 13:16:30
794
原创 SQL更新语句执行流程
redolog 是 InnoDB 存储引擎独有的,是保证事物持久性的重要机制。当 mysql 意外宕机或崩溃时,保证已提交的事物,确定持久化到磁盘的一种措施,防止数据丢失;
2024-03-28 16:14:54
524
原创 SQL查询执行流程
在 MySQL 执行一条查询语句的时候,比如,这篇文章来简要的描述SQL查询的执行流程可以把整体结构分成 Server 层和存储引擎层,Server 层包括。存储引擎层则有常见的 InnoDB,MyISAM,Menory 存储引擎,在 MySQL5.5 后默认使用 InnoDB 存储引擎。
2024-03-27 17:53:26
414
原创 Lucene轻量级搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装
Lucene 是一个本地全文搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装
2024-03-11 21:30:51
1333
原创 史上最详细的Springboot发送各类邮件教程
*** 普通邮件发送* @param form 发送人* @param to 发送对象* @param subject 主题* @param content 内容*//*** Html邮件发送* @param form 发送人* @param to 发送对象* @param subject 主题* @param content 内容*//*** 邮件发送* @param name 发送人名称* @param form 发送人* @param to 发送对象。
2024-03-09 17:26:41
11823
1
原创 枚举字典最佳实践
枚举是 Java 开发中必不可少的一部分,工作中常用来定义单例工具类,常量,状态字典等,本文主要介绍枚举当做字典的最佳实践。
2024-03-06 17:19:41
1189
1
原创 本地缓存Caffeine
一个项目里可能需要缓存的数据有很多,比如用户信息,权限信息,菜单信息等等,我们需要给不同的场景分配不同的命名空间,并设置不同的过期时间/*** 用户缓存,缓存时间单位/秒*//*** 菜单缓存,缓存时间单位/秒*/;/*** 缓存名称*//*** 过期时间*/...
2023-11-15 11:04:24
841
1
原创 alibabaCloud整合Nacos注册中心和配置中心
如果要在特定范围内(⽐如某个应⽤上)覆盖某个共享dataId上的特定属性,请使⽤ extension-config。user-service-dev.yml(nacos上的当前环境配置) > user-service.yml(⽐如其他应⽤的数据库url,都是⼀个固定的url,使⽤。上的)> application.yml(本地的)数据的,但是这时候从nacos配置中心修改成。是特例,需要为该应⽤配置扩展属性来覆盖。,服务里是不会更新的,获取数据还是。的共享配置,但其中有⼀个应⽤。这样是可以正常获取到。
2023-10-30 15:44:40
222
1
原创 mybatis查询大批量数据
服务端数据准备完成后,进行数据传输,它允许应用程序在数据库服务器上打开一个游标并按需检索数据,而不是一次性获取整个结果集,类似客户端向服务端分批。公司里有很多需要跑批数据的场景,这些数据几十万到几千万不等,目前我们采用的是分页查询,但是分页查询有个深度分页问题,上百万的数据就会查询的很慢。客户端而言,数据每次读取都是从本机器的内核缓冲区,所以性能会更快一些。代表的客户端内核源源不断的输送数据,直到客户端请求 Socket 缓冲区满,这时的。问题,我们可以选择使用分页查询,这样就不会导致内存溢出问题了。
2023-09-14 15:34:18
1751
1
原创 mybatis缓存源码解析
xml配置:yml配置:xml配置:yml配置:创建sqlSession代理对象默认使用2. 创建代理对象方法是个关键方法,决定是创建一个新的还是复用旧的3. 创建或复用对象如果在同一个事务中,则使用旧的对象如果不在同一个事务中,则重新通过创建新的对象如果不在同一个事务下,那么每次查询都会创建一个新的,那就看不到一级缓存的效果了,所以想要看效果,需要开启事务,保证几次查询用的是同一个创建新的对象这个日志很明显4. 创建对象这里的就是二级缓存的开关,
2023-09-13 15:25:07
455
1
原创 SPI机制
SPI (Service Provider Interface),主要适用于扩展作用,SPI可以很灵活的让接口和实现分离,让api提供者只提供接口,第三方来实现,然后可以使用配置文件的方式来实现替换或者扩展,在框架中比较常见,提高框架的可扩展性。
2023-05-11 18:03:02
215
原创 接口安全处理
在我们日常开发中,存在一些接口是敏感且重要的,比如充值接口,如果在你调用充值接口的时候被别人抓包了,然后就可以修改充值的金额,本来充值10元可以改成充值10w,产生重大生产问题,再或者说被被人抓包了,别人可以不限制的调用该充值10元的接口,调用几万次,也是会导致重大问题,那么我们该如何保证接口安全呢?说到数据加密,我们不难想到使用HTTPS进行传输,HTTPS使用了RSA和AES加密的方式保证了数据传输中的安全问题,具体的HTTPS的加密原理,请看。,所以一般转账类安全性要求高的接口开发,都需要。
2023-04-05 17:40:56
1153
2
原创 ThreadLocal父子间通信的四种解决方案
ThreadLocal 是存储在线程栈帧中的一块数据存储区域,其可以做到线程与线程之间的读写隔离。但是在我们的日常场景中,经常会出现父线程需要向子线程中传递消息,而 ThreadLocal 仅能在当前线程上进行数据缓存,这里就介绍4种父子间通信问题;
2023-02-19 19:27:52
1822
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人