What a Life

「Live for yourself」

Mybatis-plus 源码解析一:@MapperScan、@Mapper、基础增删改查

@MapperScan 使用场景:打在配置类或启动类上,从指定路径或当前包所在路径开始,扫描mapper接口,动态生成bean注册到容器中。 MapperScannerRegistrar @MapperScan 包含了一个元注解 @Import(MapperScannerRegistrar.class)。 @Import 可以和 ImportBeanDefinitionRegistr...

ThreadLocal

作用 同一个 ThreadLocal 对象可以管理多个线程中的对象,且线程之间数据是隔离的,互不干扰。 有两个主要应用场景: 每个线程需要自己拥有一份独立的对象,比如 SimpleDateFormat,它是线程不安全的 在同一线程中传递全局变量,比如会话信息、用户权限等等,就不需要为每个方法都加一个入参了 示例 演示一下全局变量的用法。 1 2 3 4 5 6...

Redis学习笔记之缓存雪崩、击穿、穿透

缓存雪崩 表现为由于大量的应用请求无法在缓存中处理,导致数据库压力骤增。 造成缓存雪崩的原因主要有两个: 大量缓存同时过期 尽量避免为大批量缓存数据设置相同的过期时间,如确有这个需求,可为每个过期时间增加一点随机值(比如随机增加1~3分钟) 如果已经发生了,可考虑服务降级 ...

MySQL学习笔记(十一):order by

order by 的内部实现有两种: 全字段排序 和 rowid排序。 按是否需要 磁盘临时文件 辅助排序可分为:内存排序 和 外部排序。 按是否需要 临时表 辅助排序可分为:内存临时表 和 磁盘临时表。 查看是否需要排序 当 explain 中的 Extra 字段显示 Using filesort,表示该查询需要排序。 注:只是表示需要排序,这里不区分是在内存还是磁盘,别...

MySQL学习笔记(十):count

count(*) 的实现方式 不同引擎实现方式不同: MyISAM:将总行数直接存在磁盘上,查询的时候返回,因此速度很快 Innodb:因为需要支持事务,而事务是由 MVCC 实现的,一行记录需要先判断对查询事务的可见性,所以“应该返回多少行” 是不确定的。因此Innodb的实现方式是把数据一行一行的从引擎中读出来,可见的行才会被累计进来。 ...

MySQL学习笔记(九):如何收缩表空间?

使用 delete 删除数据不会使表空间变小 前文有提过,delete 只是将记录标记为删除,并没有真正删除。只有当其对应的 update undo logs 被清除时才会由后台 purge 任务物理删除,即没有事务再需要这些版本的记录时会执行物理删除。 即便是物理删除,也不会把磁盘空间返还给操作系统。究其原因,出于性能考虑,物理删除后的空间会被复用。删除记录后,当插入符合范围条件的数据...

MySQL学习笔记(八):MySQL锁

MySQL中的锁有三类:全局锁、表级锁、行级锁 全局锁 即给整个数据库实例上锁,让整个库都处于只读状态,除查询以外的操作都会被阻塞。server层实现。 如果加上全局锁后,客户端由于异常断开,MySQL会自动释放这个锁。 加锁: 1 2 3 flush tables with read lock; 或 flush table t with read lock; 解锁: ...

MySQL学习笔记(七):MySQL索引

索引的常见实现方式有哪些? 哈希表:O(1) 的时间复杂度,速度最快,但缺点是只适用于等值查询。因为key是无序的,所以区间查询时只能全部遍历一遍。 有序数组:O(logn)的时间复杂度,利用二分法。可用于等值查询和区间查询,但插入删除时间复杂度较高,因为需要移动插入点后面的所有元素。所以有序数组比较适合静态存储引擎,即基本不会变的数据。 ...

MySQL学习笔记(六):MySQL事务

解决的问题 脏读:读到还没有提交事务的数据 不可重复读:前后读取的记录内容不一致 幻读:同一事务前后两次查询同一范围数据时,后一次查询看到了前一次查询没有看到的行 主要针对 insert 操作, 使用间隙锁解决,详见 MySQL学习笔记(八)-MySQL锁之 next-key lock ...

MySQL学习笔记(五):MySQL计算QPS和TPS

QPS 基于 Com_select 基于questions的会统计show命令,mysql设置环境变量的时候也会增加,不太准。 Com_select 用于统计 select 语句的执行次数,类似的还有 Com_delete、Com_update 等。 参考:Com_xxx 1 2 3 4 5 #!/usr/bin/env bash OLD_QPS=`echo "sh...