自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud OpenFeign 深度实战:微服务之间如何优雅地进行远程调用

在微服务架构中,一个系统往往会被拆分成多个服务。用户服务 user-service订单服务 order-service商品服务 product-service库存服务 stock-service支付服务 pay-service当用户下单时,订单服务可能需要调用用户服务查询用户信息,调用商品服务查询商品详情,调用库存服务扣减库存,调用支付服务发起支付。微服务之间如何进行远程调用?最原始的方式是使用或HttpClient手写 HTTP 请求,但这种方式代码比较繁琐,维护成本高。OpenFeign。

2026-06-01 13:55:15 273 4

原创 微服务组件之--Nacos

一、Nacos 是什么?Nacos 全称是用来管理微服务实例,比如订单服务、用户服务、商品服务启动后注册到 Nacos,其他服务可以通过 Nacos 找到它们。用来统一管理配置,比如数据库地址、Redis 地址、开关配置、限流参数等,并且支持动态刷新。官方对 Nacos 的定位也是:帮助开发者发现、配置和管理微服务,支持服务发现、服务配置、服务元数据和流量管理等能力。现在新版 Nacos 还在往等方向扩展,不过你目前学习微服务,重点先掌握注册中心和配置中心即可。

2026-06-01 11:50:29 517

原创 Spring Boot 多数据源管理实战:dynamic-datasource 从入门到架构落地

注解配合 AOP 拦截,在方法执行前把数据源标识放入 ThreadLocal,执行 SQL 时由动态路由数据源根据当前线程上下文选择真实 DataSource,方法执行完成后再清理上下文。它支持主从读写分离、数据源分组、动态增删数据源、敏感配置加密、Hikari/Druid 等连接池集成,也可以结合 Seata 处理分布式事务。实际项目中我一般会把。因为一次请求通常由一个线程处理,这个线程中执行 Service、Mapper、SQL 时,都可以通过 ThreadLocal 获取当前应该使用哪个数据源。

2026-05-30 05:25:03 240

原创 ThreadPoolExecutor 实战及其原理分析:从 Spring Boot 项目讲透线程池

摘要: SpringBoot项目中,线程池能有效提升系统性能与吞吐量。直接创建线程会导致频繁开销、资源不可控等问题,而线程池通过复用线程、限制数量及管理任务队列解决这些问题。核心类ThreadPoolExecutor的七大参数(如核心线程数、队列类型、拒绝策略等)需合理配置。SpringBoot中可通过@Bean声明线程池或使用@Async注解实现异步任务。针对CPU密集型或IO密集型任务,参数设置需不同(如线程数=CPU核数+1或核数*2)。生产环境中,建议结合Nacos等配置中心实现线程池参数动态调整,

2026-05-29 03:12:40 352

原创 深入理解 ReentrantLock:从使用方式到 AQS 底层原理

ReentrantLock 底层通过 AQS 的 state 变量记录锁的重入次数。当 state 为 0 时表示锁没有被持有,线程通过 CAS 把 state 从 0 改成 1 后获取锁成功。如果同一个线程再次获取锁,会判断当前线程是否是锁持有者,如果是,就把 state 加 1。释放锁时 state 减 1,只有当 state 减到 0 时,锁才真正释放。ReentrantLock 底层通过 AQS 的 state 变量记录锁的重入次数。

2026-05-28 23:38:13 431

原创 ThreadLocal 详解:从入门、底层原理到内存泄漏问题

├── key: ThreadLocal对象1, value: 当前线程的变量副本1。├── key: ThreadLocal对象2, value: 当前线程的变量副本2。└── key: ThreadLocal对象3, value: 当前线程的变量副本3。一个请求线程中,多个 DAO 方法都可以使用同一个连接,从而保证它们在同一个事务中。给每个线程都创建一份属于自己的变量副本,线程之间互不影响。如果多个线程同时修改这个变量,就可能出现线程安全问题。是一个静态共享变量,两个线程操作的是同一份数据。

2026-05-28 03:59:31 357

原创 Java 异步编程之 Thread、Runnable、Callable、CompletableFuture 与线程池实战

不要大量使用:CompletableFuture.supplyAsync(() -> queryData());因为默认使用的是:ForkJoinPool.commonPool()这是公共线程池,不适合承载大量业务任务。推荐:

2026-05-27 22:39:58 491

原创 初步理解 JVM:类加载机制、内存结构与核心运行原理

类加载指的是 JVM 把 .class 字节码文件加载到内存中,并对其进行校验、转换、初始化,使其最终成为 JVM 可以直接使用的 Java 类型。类加载的完整生命周期如下:加载 -> 验证 -> 准备 -> 解析 -> 初始化其中,验证、准备、解析统称为连接 Linking。

2026-05-25 23:26:48 535

原创 MQ 常见问题梳理:消息不丢、顺序消费、幂等处理与积压治理

幂等是指同一个操作执行一次和执行多次,最终结果一致。例如:这类操作天然比较接近幂等,因为多次把订单状态更新为 PAID,结果是一样的。但下面这种操作就不是幂等:如果重复执行,就会重复扣款。

2026-05-25 08:30:00 361

原创 深入理解 RocketMQ 消息模型:从客户端机制到 Spring Boot 实战与生产最佳实践

RocketMQ 的价值并不仅仅是“把消息发送出去”,而是围绕可靠性、一致性、吞吐量和业务治理提供了一套完整机制。普通消息解决异步解耦问题。广播消息用于每个实例都需要执行的通知类场景。Tag 与 SQL 过滤帮助消费者只处理关心的消息。顺序消息保证同一业务实体的状态流转顺序。延迟消息适用于订单超时、定时提醒等场景。批量消息提高大量小消息的发送效率。事务消息用于解决本地事务与消息发送的一致性问题。ACL 为生产环境提供访问安全保障。消费端必须做好幂等、重试监控和死信治理。

2026-05-23 23:13:07 397

原创 RocketMQ 从入门到实战:一篇文章搞懂消息队列、架构模型与集群部署

这篇文章我们从 0 到 1 梳理了 RocketMQ 的核心内容。可以总结为几句话:1. MQ 的核心价值是:解耦、异步、削峰、可靠2. RocketMQ 是一款高性能、高可靠的分布式消息中间件3. RocketMQ 核心组件包括:NameServer、Broker、Producer、Consumer4. NameServer 负责路由发现,Broker 负责消息存储和投递5. Producer 发送消息到 Topic,Consumer 从 Topic 消费消息。

2026-05-21 17:39:45 432

原创 Redis 缓存问题:穿透、击穿、雪崩、Big Key

穿透是查不存在的数据,击穿是一个热点 key 失效,雪崩是一大片 key 同时失效,Big Key 是一个 key 太胖,热点 Key 是一个 key 太火。大量缓存 key 在同一时间失效,或者 Redis 整体宕机,导致大量请求瞬间打到数据库。查询的数据在 Redis 中不存在,在数据库中也不存在,导致每次请求都会打到数据库。1. 互斥锁:缓存失效后,只允许一个线程去查数据库并重建缓存,其他线程等待。缓存击穿指的是:某一个热点 key 突然失效,大量请求同时打到数据库。生产环境建议低峰期执行。

2026-05-20 01:29:23 333

原创 大厂生产级Redis高并发分布式锁实战

《Redis分布式锁入门指南》摘要 本文以电商秒杀场景为例,生动讲解了Redis分布式锁的原理与实现。当多个服务实例并发操作共享资源时,本地锁失效,需要借助Redis实现跨JVM的分布式锁。基础实现包含SETNX加锁和Lua脚本原子性解锁,但需处理锁过期、误删等问题。Redisson作为高级客户端,提供了完善的分布式锁解决方案,支持可重入锁、WatchDog自动续期等特性,通过Hash结构记录锁持有者信息,确保线程安全。文章对比了手动实现与Redisson的差异,推荐使用Redisson简化开发,其底层机制

2026-05-18 22:35:42 530

原创 Redis进阶一之线程模型、数据持久化

Redis采用混合线程模型:核心命令执行保持单线程,通过I/O多路复用处理多连接,6.0+版本引入多线程辅助网络I/O。持久化提供RDB和AOF两种策略:RDB通过定时快照实现高效备份但可能丢数据,AOF记录写操作更安全但性能较低。生产环境建议根据需求选择,重要数据可同时开启RDB+AOF,RDB用于全量备份,AOF确保最小化数据丢失。

2026-05-18 03:30:18 316

原创 Redis核心数据结构

Redis核心数据结构及应用场景摘要:Redis提供5种主要数据结构:1)String:基础KV存储,适用于缓存对象、分布式锁;2)Hash:适合存储对象字段频繁修改的场景,如购物车;3)List:有序列表,可用于消息队列和最新列表;4)Set:无序不重复集合,适用于点赞、共同关注;5)ZSet:带分数的有序集合,适用于排行榜和时间排序场景。每种结构都有其典型应用场景,如String适合整体读写,Hash适合字段级操作,ZSet适合带权重的排序需求。合理选择数据结构能显著提升Redis使用效率。

2026-05-16 21:45:34 542

原创 七、InnoDb 底层原理与MySQL旧日志机制深入剖析

InnoDB是MySQL默认的事务型存储引擎,支持ACID事务、行级锁、MVCC和崩溃恢复。其核心机制包括:通过B+树组织数据,Buffer Pool提升性能,redo log、undo log和binlog保障数据安全。redo log参数包括缓冲区大小、文件位置和写入策略(innodb_flush_log_at_trx_commit控制持久化级别)。binlog记录所有数据修改操作,支持STATEMENT、ROW和MIXED三种格式,通过sync_binlog控制写入策略。binlog可用于数据恢复,通

2026-05-14 23:14:48 407

原创 六、MVCC 底层原理剖析

MVCC是多版本并发控制机制,通过保存数据的历史版本实现无锁并发读写。其核心包括:隐藏字段(事务ID和回滚指针)、undo log版本链和ReadView可见性判断。普通select查询历史快照不加锁,而update等操作读取最新数据并加锁。不同隔离级别下ReadView生成策略不同:RC级别每次select新建ReadView,RR级别事务内复用同一个ReadView。MVCC配合Next-Key Lock共同解决了不可重复读和幻读问题,实现了高效的事务并发控制。

2026-05-13 23:05:02 50

原创 五. 深入理解MySQL事务隔离级别与锁机制

我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。这 时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此作进一步的 处理,就会产生未提交的数据依赖关系。锁定粒度最小,发生锁冲突的概率最低,并发度最高。

2026-05-12 17:33:24 326

原创 四、MySQL 索引优化实战

本文总结了MySQL索引优化与SQL查询优化的关键点:1)联合索引范围查询首字段不走索引;2)覆盖索引可减少回表;3)大数据量时IN/OR走索引,小数据量全表扫描;4)like 'KK%'使用索引下推优化。Order by/Group by优化需遵循最左前缀原则,优先利用索引排序。分页查询建议先查主键再关联,避免大量数据偏移。关联查询应遵循小表驱动大表原则,确保关联字段有索引。前缀索引适用于长字符串字段,但会影响排序操作。优化核心是减少回表次数和数据扫描量,平衡where条件与排序的索引使用。

2026-05-11 00:50:28 324

原创 三、Explain详解与索引实践

摘要:Explain是MySQL提供的SQL性能分析工具,通过在SELECT前添加explain关键字可获取查询执行计划而非实际执行结果。关键列包括:id(执行顺序)、select_type(查询类型)、table(访问的表)、type(访问方式,从最优system到最差ALL)、possible_keys/keys(可能/实际使用的索引)等。type列尤为重要,反映数据访问效率。索引失效场景包括左模糊查询、隐式类型转换、违反最左前缀原则等。合理使用Explain可快速定位查询性能瓶颈,优化索引使用策略。

2026-05-09 16:21:51 477

原创 二、深入理解MySQL索引底层数据结构与算法

MySQL索引是高效查询的关键数据结构,InnoDB主要采用B+树实现。B+树相比B树具有更高查询效率:非叶节点仅存储索引,叶节点包含全部索引并通过指针连接,支持快速范围查询。InnoDB表数据按聚簇索引(通常为主键)组织,二级索引存储主键值而非完整数据,查询时可能需"回表"。建议使用整型自增主键,可减少页分裂且比较高效。哈希索引虽快但仅支持等值查询。合理设计索引能显著提升查询性能,需权衡查询需求与存储开销。

2026-05-09 05:16:45 184

原创 一、MySQL 架构概要

MySQL查询执行流程解析:一条SQL查询语句的执行过程可分为客户端请求、Server层处理和存储引擎交互三个阶段。首先,客户端通过连接器建立连接并进行权限验证;接着查询缓存(MySQL8.0已移除)检查是否命中缓存;未命中则进入分析器进行词法语法分析;优化器选择最优执行计划;最后由执行器调用存储引擎接口获取数据。InnoDB引擎采用WAL技术,通过redo log保证事务持久性,而Server层的binlog用于数据归档和恢复。整个过程体现了MySQL分层架构的设计思想,既保证了查询效率,又确保了数据安全

2026-05-07 18:06:42 483

空空如也

空空如也

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

TA关注的人

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