自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 kafka与RocketMQ的不同

rocketMQ 是通过Mmap写入 commitLog 文件的, rocketMq 写入消息需要对单条数据进行操作,比如计算消息的tag,索引,偏移量,更新索引文件,延时信息,所有每条消息在写入时都需要进行解析。写入真正消息log文件时直接通过,调用操作系统write函数以顺序写方式写入log文件,没有使用 零拷贝技术,因为kafka是将一批消息数据,直接写入log文件,直接通过消息的量级,分摊了单条消息写入性能。如 工控机台,批次信息,新批次进入新topic,旧批次依然进入旧topic。

2026-09-08 13:31:17 221

原创 mysql_间隙锁与临键锁测试

后,t1 commit 提交后,t2获取到锁后正常提交。事务2继续: 事务2插入age=20 正常插入,插入age=19 时,无法插入。事务2 继续: 插入age = 14 时,在事务1间隙锁范围内,无法插入。age普通索引,间隙锁范围是:包括10 ,但是不包括15 ,区间为(10,15]携带=时,普通索引 的区间 age 在 [5,20) ,包含5,不包含20.正常情况:事务1 commit后,事务2立即插入age=5成功。索引:age_index 为普通索引 , RR 级别;

2026-08-07 17:35:59 239

原创 JUC-并发工具类

规则二:acquire(int permits) 要与 release(int permits) 匹配,如果你一次性获取了多个许可,释放时必须释放相同数量,否则会改变信号量的许可总量。与 CountDownLatch 不同,CyclicBarrier 是可循环使用的(Cyclic),所有线程释放后,计数器自动重置,可以再次使用。只有 1 个许可,所以同一时刻只有一个线程能通过 acquire(),其他线程阻塞,直到 release()。当所有线程通过屏障后,计数器自动重置为初始值,可以再次使用。

2026-06-26 01:04:18 178

原创 分布式事务

核心机制:将一个大事务拆分成一系列本地事务(子事务),每个子事务都有对应的补偿操作,事务执行器按顺序执行这些子事务,一旦某个子事务失败,就会按相反的顺序执行之前所有成功子事务的补偿操作。Seata 实现:Seata 通过状态机引擎来驱动 Saga 流程,用 JSON 文件定义执行流程和补偿规则,支持服务编排、并发等复杂场景。优点:无锁,高性能,适合处理长流程,涉及三方服务场景。缺点:业务侵入性强,且不保证隔离性。选型建议金融转账必须强一致场景,对性能要求不高,考虑XA模式。

2026-06-22 14:23:20 213

原创 JUC-synchronized

i++ 是线程安全的吗?synchronized同步块是java提供的内置锁,java中每一个对象都可以当做一个同步锁。他的锁机制直接内嵌与java语法与jvm底层实现,无需以来任何底层库或手动API调用,所以成为内置锁。

2026-06-20 23:51:34 158

原创 RocketMQ-分布式集群

传统主从复制是 RocketMQ 高可用方案的基石,适用于对数据可靠性要求高,且能容忍短暂写入中断、有专业运维团队支持的核心业务优点:数据备份,数据容灾,消费者可以切换到从节点继续消费消息。缺点:非自动故障转移。

2026-06-17 22:04:13 296

原创 分布式唯一 ID

1:全局唯一性,基本要求2:趋势递增,单调递增。保证下一个id永远大于上一个id3:信息安全,如果id时连续的可以通过id值推算出系统信息。

2026-06-16 12:24:58 351

原创 redis-为什么redis速度快?

所以。

2026-06-11 00:34:03 422

原创 JUC-线程池

线程池(Thread Pool)是一种基于池化思想管理线程的工具;优势重复利用已经创建的线程,降低频繁创建/销毁线程的开销任务到达时,无需创建线程可立即执行线程是稀缺资源,无限制创建会影响系统资源失衡,降低系统稳定性,使用线程池可以统一进行线程分配,调优,监控。如延时定时线程池。

2026-06-10 00:01:24 358

原创 JUC-AQS与ReentrantLock

AbstractQueuedSynchronizer 是 java.util.concurrent 包的基石,ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock 等同步器都基于它实现。AQS 提供了一个框架,用于实现依赖 状态(state) 和 FIFO 等待队列 的阻塞锁和同步器。

2026-06-09 00:30:14 363

原创 JUC-ThreadLocal

ThreadLocal类用来提供线程内部的局部变量同一个ThreadLocal对象在不同线程调用get()时会得到独立的值。通常来说都是private static类型的,用于关联线程和线程上下文线程安全:多线程场景下保证同时操作共享数据安全。数据传递:通过ThreadLocal在同一线程,不同组件中传递数据。线程隔离:每个线程的ThreadLocal都是独立的,互不影响。常用方法ThreadLocal() 创建ThreadLocal对象。

2026-06-09 00:28:15 346

原创 JVM-调优工具

这个因为之前已经大概知道Young GC的频率,假设是每5分钟一次,那么可以执行命令 jstat -gc pid 300000 10 ,观察每次结果eden,survivor和老年代使用的变化情况,在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出老年代对象增长速率。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。

2026-06-07 10:44:39 233

原创 JVM-垃圾收集器

CMS并发回收时,老年代垃圾产生速度超过回收速度,导致老年代被填满,此时CMS会降级为Serial Old进行单线程Full GC,导致超长STW停顿。

2026-06-07 10:42:16 356

原创 JVM-内存分配与对象创建

每个类加载器对自己加载过的类都有一个缓存。

2026-06-06 00:34:34 207

原创 RocketMQ-部分功能实现机制

但是,在后期的不断改进过程中,sendfile优化了实现机制,在拷⻉过程中,并不直接拷⻉⽂件的内容,⽽是只拷⻉⼀个带有⽂件位置和⻓度等信息的⽂件描述符FD,这样就⼤⼤减少了需要传递的数据。mmap的映射机制由于还是需要⽤户态保存⽂件的映射信息,数据复制的过程也需要⽤户态的参与,这其中的变数还是⾮常多的。1:Producer发送消息时,默认会轮询⽬标Topic下的所有MessageQueue,并采⽤递增取模的⽅式往不同的MessageQueue上发送消息,以达到让消息平均落在不同的queue上的⽬的。

2026-06-04 22:46:27 343

原创 RocketMQ-常见问题梳理

1:生产者发送消息到MQ同步发送+多次尝试方式,通过降低吞吐量保证消息安全。事务消息机制–多次网络请求2:Broker收到消息后消息不丢失设置同步刷盘 – I/O负担重搭建Dledger集群–网络负担重3:消费者消费消息不丢失同步处理消息,再提交offset4:MQ集群挂了,如何不丢失消息增加临时的降级存储。

2026-06-03 20:52:32 226

原创 RocketMQ-客户端编程模型

实际存储的消息是topic下面对应的一系列的message消息队列,这些消息队列会尽量平均的分配到多个不同的broker当中 ,在集群当中,根据broker的数量均匀分配,这样有利于发挥broker的这种集群的性能优势。2、消费者需要实现MessageListenerOrderly接⼝,实际上在broker服务端,处理MessageListenerOrderly时,会给⼀个MessageQueue加锁,拿到MessageQueue上所有的消息,然后再去读取下⼀个MessageQueue的消息。

2026-06-03 20:51:38 207

原创 redis-bigkey优化

假设:业务期望的QPS是50000,一次命令时间(网络延迟 + Jedis执行命令 )的平均耗时约为1ms,一个连接的QPS大约是1000/s,maxTotal 理论值=50000 / 1000 = 50个, 在加上预留缓冲(GC、网络抖动或慢查询等原因),预留 20% 的缓冲容量,推荐maxTotal=60。使用连接的过程中,如果连接数超过了minIdle,继续建立连接,如果超过maxIdle,当超过的连接执行完业务后会慢慢被移出连接池释放掉。超出的连接会被拒绝。但如果并发量不高,会造成资源浪费。

2026-05-31 18:20:07 212

原创 redis-数据安全性

在Redis7中,将这两部分分成了单独的⽂件,这样,即可以分别⽤来恢复⽂件,也便于控制AOF⽂件的⼤⼩。:sentinel节点会寻求其他节点对主节点的判断,如果超过半数sentinel节点认为master下线了,则认为master下线(客观下线O_DOWN),然后开始故障切换。2:调整slot的分布,将那些数据量多,访问频繁的热点slot进⾏重新调配,让他们尽量平均的分配到不同的Redis节点上。现象:⼤量的数据被集中存储到了集群中某⼀个热点Redis节点上,从⽽造成这⼀个节点的负载明显⼤于其他节点。

2026-05-28 01:29:01 407

原创 redis数据结构

skiplist是⼀种典型的⽤空间换时间的解决⽅案,适合那些数据量⽐较⼤,且读多写少的数据场景。表示redis上层数据类型,如string、hash、set等,使用type命令查看。Redis 判断是否为整数,看的是数值是否超出 long 范围,不是看字符串长度。表示对象引用次数,可以使用 object refcount key查看。redis在set数据时,会根据value的类型不同设置底层的编码格式。**存储格式 skiplist 与 listpack **表示一个指针,指向真正底层的数据结构。

2026-05-26 08:58:23 339

原创 redis-线程模型

如果事务执行过程中,服务器宕机,会造成aof文件操作记录与数据不符合,这种情况会导致redis重新启动出现错误,无法正常启动。**注意:不保证原子性 ** Redis 执行 Pipeline 中的命令时,没有"加锁"或"隔离"机制,仍然可能执行其他客户端的命令,不能保证多个命令的原子性。Redis 事务提供隔离性和顺序执行支持乐观锁简单易用,但不支持回滚,WATCH 高并发效率低,无条件判断。事务在执行 EXEC 之前只"入队"不执行,EXEC 后连续执行所有命令,期间 Redis 不接受其他命令。

2026-05-25 23:45:52 396

原创 MySQL-主从/集群架构

InnoDB Cluster将三个MySQL数据库实例构成一个高可用集群。其中一个实例是具有读/写能力的主要成员,其他两个实例是具有只读能力的次要成员。组复制将数据从主要成员复制到次要成员。MySQLRouter将客户端应用程序连接到集群的主要成员。MySQL Router与组复制和MySQL Shell高度整合,只有将其与组复制和MySQL Shell共同使用,才能够称为InnoDB Cluster。

2026-05-23 16:52:51 48

原创 MySQL-日志

展示了InnoDB存储引擎的核心组件及其相互关系,包括内存结构(Buffer Pool、Log Buffer等)和磁盘结构(数据文件、日志文件等),帮助理解MySQL如何通过多级缓存和日志机制保证数据的一致性与持久性。

2026-05-23 11:44:29 388

原创 redis-缓存架构并发问题分析

如果可以确定第一个线程重构缓存执行时间,设置线程的尝试加锁等待时间(预估缓存重建时间 + 缓冲时间),不在锁上无限等待,失败后直接去执行"超时后的重试逻辑"。线程3执行查数据库stock=10 ,与更新缓存中间时出现异常执行延迟,线程2此时执行写数据库并更新缓存,线程3恢复后又继续执行更新缓存,导致数据库与缓存之间数据不一致。线程3执行查数据库stock=10 ,与更新缓存中间时出现异常执行延迟,线程2此时执行写数据库并删除缓存,线程3恢复后又继续执行更新缓存,导致数据库与缓存之间数据不一致。

2026-05-22 23:35:30 414

原创 mysql-事务-锁

一组操作,要么全部执行,要么全部不执行,保证数据最终一致性。

2026-05-22 15:42:19 275

原创 mysql-索引优化

using index condition使用到索引下推:扫描所有 name > ‘L’ 的行,在索引层判断 age 和 position(不满足的跳过),只回表满足条件的行。1:like “aa%”,一般情况下会使用索引下推。3.范围查询查询时可以将大的范围拆分成多个小范围。2 :存储引擎不能使用索引中范围条件右边的列。1、根据自增且连续的主键排序的分页查询。2、根据非主键字段排序的分页查询。

2026-05-21 19:07:14 293

原创 redis-分布式锁

当一个客户端尝试获取锁失败时(锁已被他人持有),Redisson 并不会立刻返回失败,而是会进入一个高效的阻塞等待模式。机制,解决了锁超时释放与业务执行时间不匹配的难题,同时在加锁、解锁的各个环节都做了精密设计,确保原子性与安全性。问题:依然存在主从/集群架构分布式锁失效(集群中从节点升级为主节点前未同步到主节点数据)方法的实现也至关重要,核心依然是 Lua 脚本,确保操作的原子性。在高并发场景线程执行顺序完全不可预料,上述只是极端情况。解决方式:jvm级锁与分布式锁。

2026-05-21 09:47:28 362

原创 mysql索引底层数据结构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2026-05-20 18:41:31 56

原创 mysql-SQL语句执行过程

主要负责数据库连接,权限管理、安全认证、SQL语句解析、分析、SQL优化,提供各种函数支持存储过程。并且server层具有专属的binlog归档日志,记录所有修改数据库数据的SQL操作,可以用来进行数据恢复与主从架构。server层包括连接器、查询缓存、分析器、优化器、执行器等模块。负责数据存储与检索。innodb支持事务、行锁、具有自己的日志系统 undoLog、redoLog。mysql 执行sql时主要分为两个模块:客户端与服务端,服务端包括serve层与存储引擎层。

2026-05-20 18:03:18 402

空空如也

空空如也

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

TA关注的人

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