- 博客(154)
- 资源 (4)
- 收藏
- 关注
原创 mybatis-plus、PageHelper分页插件
PageHelper:轻量级插件,无须撰写limit语句。mybatis-plus:重量级插件,无须撰写limit。
2024-02-19 12:53:08 181
原创 mybatis datasource种类
mybatis 内置了三种数据源,分别是Pooled,Unpooled和JNDI,其中Pooled数据源是具有连接池的。开发场景下,通常使用以下几种数据源。Druid:兼顾了性能和监控,综合。C3P0:性能稍好,常用。Hikari:性能快。
2024-02-18 18:30:15 113
原创 mybatis缓存机制
经验:二级缓存性能很好,但是对开发者有一定的要求,这个要求就是在撰写mapper时候,一定要保证在命名空间里面的单表查询,一切join表场景全部避免,这样可以有效避免脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议不要开启二级缓存,多表join场景下,有的表可以读到最新的值,但有的表会读到以前的缓存,同样会出现脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议关闭一级缓存,产生脏读,读旧值情况比较大。一级缓存(SqlSession会话级别缓存)二级缓存(命名空间缓存,可以跨会话级别)
2024-02-16 23:33:47 179
原创 #{}和${}区别
{}类似jdbc中的PreparedStatement,对于传入的参数,在预处理阶段会使用?代替,可以有效的避免SQL注入。${}就是拼接字符串,没有预编译操作。
2024-02-16 20:54:46 216
原创 Innodb下修改事务工作流程(buffer pool、redo log、undolog、binlog)
undolog的写入最开始写到内存中的,然后由1个后台线程定时刷新到磁盘中的。Innodb优先从Buffer Pool中查询该条记录,如果没有就从磁盘文件中缓存到Buffer Pool中。binlog中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。提交事务后,后台异步线程将Buffer Pool写入磁盘中,这里会有一定的延时。同步修改到redo log buffer,此时并没有写入磁盘中。更新Buffer pool中的脏页,此时并没有写入磁盘中。4、写入redo log日志。
2024-02-16 15:01:45 196
原创 union和union all区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序;效率高 UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;效率低
2024-02-16 12:50:09 76
原创 mysql sql执行次序
from--->join--->where-->group by-->having-->select--->distinct--->order by --->limit
2024-02-16 11:18:24 114
原创 msyql主从延时优化
2、从库sql线程只有一个,当执行sql线程过程中,遇到复杂的sql语句的场景,可能会发生死锁可能。部署一台不对外提供查询的从节点,专门负责sql线程执行sql。3、从服务器机器性能一般。3、选择性能更好的机器。
2024-02-10 19:02:05 88
原创 msyql主从复制
1、主从复制开启,主库负责dump当前binlog日志(update、insert、delete),从服务器准备开启IO线程和sql线程。2、从库负责向主库发起连接,IO线程负责拉取主库的binlog日志并且同步到relay log日志。3、从服务器使用sql线程执行relay log里面的sql语句,并且持久化到从服务中。
2024-02-10 18:45:56 344
原创 binlog、undolog、redolog
binlog:适用于innodb和myisam引擎,用于数据备份、主从复制,保存所有的ddl和dml数据,以二进制进行存储。undolog:适用于innodb引擎,负责正常回滚事务、崩溃回滚事务,主要记录。redolog:适用于innodb引擎,负责崩溃恢复和数据持久化,主要记录执行。执行的sql,一旦事务需要回滚,直接执行事务发生前的sql语句。
2024-02-10 17:52:12 124
原创 limit深度分页和优化思路
先读取m+n条记录,然后抛弃前面n条记录,返回从m开始n条记录,深度分页越往后性能越差。3、再度优化提升思路,加入order by ,走联合索引。1、定义一个自增序列,一个子查询将所有的自增id全部查出。参考oracle rowsnumber分页思路。假设查询商品数量、商品名称等。
2024-02-10 17:25:13 214
原创 count(1)、count(*)、count(字段)区别
count(1)、count(*),没有区别,直接查询符合条件的行数(不管有没有null值)。count(字段)查询符合条件不为空的行数。
2024-02-10 15:11:43 90
原创 聚簇索引、非聚簇索引、回表、索引下推、覆盖索引
发生在联合索引,多个字段进行联合索引的时候,遵循最左匹配原则,只是在索引上进行匹配,也就是说不会产生回表,通常发生在like语句,查询计划,Using index condition就是索引下推技术。覆盖索引发生在联合索引,where条件遵循最左匹配原则,order by条件需要满足联合索引所有条件,否则产生回表,这个IO消耗非常大。经验:优化mysql的时候,当遇到至少百万级表的数据的情况下,通过减少回表次数来优化sql语句是一种常用的手段之一,只要保证正确使用联合索引那么效率自然不会低下。
2024-02-10 14:03:43 181
原创 mysql RR、RC隔离级别实现原理
采用乐观锁实现,它通过对不同事务生成不同的快照版本,通过UNDO版本链进行管理并且在MVCC里面,规定了高版本能够看到低版本的事务变更,低版本看不到高版本的事务变更,从而实现了不同事务之间的数据隔离。是一种特殊的表级别锁。简言之,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行, 是连续的主键值。写锁,给事务加上排它锁,该事务可以执行任意读写操作,其他事务无法获取该排它锁,也不能加其他类型的锁。保证并发场景下,使用RC高过RR,RC的锁的粒度是只有一行,RR是多行的锁。
2024-02-09 08:43:47 796
原创 Seata RM端管理分支事务源码
往GlobalSession里面添加BranchSession,实际就是netty客户端发送了一次绑定xid请求给TC端。
2024-01-13 17:43:13 425
原创 Seata AT Server (TC端)启动过程
如果是以容器方式运行的seata,则使用环境变量的参数来初始化。如果不是以容器方式运行的seata,则在启动参数来初始化。订阅Metrics消息进行监控管理,发布在协调器初始化中。负责全局事务的开启、提交和回滚。
2023-12-30 14:18:39 403
原创 Seata AT TM->RC->RM一次完整的交互过程
原理TM两阶段:阶段1:TM向TC申请全局事务,netty客户端发起了一次记录xid的请求阶段2:TC协调之后,决定执行RM是否提交或者回滚。
2023-12-29 14:12:48 455
原创 Redis主从切换(单点故障)解决源码
初始化发布命令,往pubsub_channels添加channel和对应的客户端列表。hash key存储了channel名称,value存储了订阅者列表。2、从redis架构去思考,拓展哨兵、master、salve都相对简单容易,2、高频次访问发布消息,容易阻塞挤压,说白了还是Reactor单线程驱动缺点。1、采用Reactor事件单线程去驱动发布订阅事件的,从pubsub_channels适配channel对应的订阅者列表。,redis只管发送消息,不会等待订阅该频道的实例响应。
2023-12-26 18:29:40 523
原创 Redis rdb源码解析
3,主从复制-->startBgsaveForReplication函数,落盘方式(rdbSaveBackground函数),不落盘方式(rdbSaveToSlavesSockets函数)。2、执行bgsave命令--->rdbSaveBackground函数或者(serverCron->prepareForShutdown)4、flushall命令--->flushallCommand函数。1、执行save命令--->rdbSave函数。
2023-12-05 17:02:33 536
原创 Redis Reactor事件驱动模型源码
文件事件结构*/// 监听事件类型掩码,// 值可以是 AE_READABLE 或 AE_WRITABLE ,// 或者 AE_READABLE | AE_WRITABLEint mask;// 读事件处理器// 写事件处理器// 多路复用库的私有数据* 已就绪事件*/// 已就绪文件描述符int fd;// 事件类型掩码,// 值可以是 AE_READABLE 或 AE_WRITABLE// 或者是两者的或int mask;/** 事件状态*/
2023-12-05 15:48:46 613
原创 Redis server启动源码
初始化数据库数据结构和pool,网络交互初始化(线程初始化、工作队列初始化)包括设置 server 运行的时区、设置哈希函数的随机种子。src/redis.c文件main函数。解析options,加载配置文件。
2023-12-05 00:17:01 503
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人