- 博客(226)
- 收藏
- 关注
原创 【Mytais系列】SqlSession
是 MyBatis 的核心交互接口,负责 SQL 执行、事务管理和缓存控制。正确使用它的生命周期和事务机制,能有效提升数据库操作的安全性和性能。结合 Mapper 接口和 Spring 等框架的事务管理(如。是框架的核心接口之一,它是应用程序与 MyBatis 交互的。,用于执行 SQL 命令、管理事务和访问数据库。查询单条记录,参数为 SQL 标识和参数对象。获取 Mapper 接口的动态代理对象。内的多次相同查询会命中缓存。),可以进一步简化开发流程。清空当前会话的一级缓存。级别(会话级缓存)。
2025-05-03 16:22:13
1113
原创 【Mytais系列】Myatis的设计模式
掌握这些模式的应用场景,能显著提升代码的可维护性和架构的灵活性。SqlSessionFactory 创建对象。复杂 DTO 构建、HTTP 请求参数封装。构建 Configuration 对象。ErrorContext 管理错误信息。不同 Executor 实现选择。RPC 客户端、AOP 切面。Executor 执行流程。算法切换(排序、支付方式)IO 流增强(缓冲、加密)数据库连接池、日志工厂。Mapper 接口实现。统一流程(支付、导出)过滤器链(权限、日志)全局配置、线程池管理。
2025-05-03 16:04:56
738
原创 【Mytais系列】Type模块:源码
实现了灵活的类型映射机制。其源码设计注重扩展性(支持自定义处理器)、性能(高效的类型查找)和线程安全(并发容器与无状态对象),是 MyBatis 框架中处理数据类型的核心基础设施。理解其源码实现,有助于开发者更好地定制类型转换逻辑,解决复杂场景下的 ORM 问题。(类型系统)是框架实现 Java 类型与数据库类型映射的核心模块,其源码设计精巧且高度可扩展。:定义 Java 类型与 JDBC 类型之间的转换逻辑。:管理类型别名,简化 XML 配置中的类名书写。类型,存储为逗号分隔的字符串。
2025-05-03 16:03:50
875
原创 【Mytais系列】Type模块:类型转换
等机制,屏蔽了 Java 对象与数据库类型之间的差异,使开发者能够专注于业务逻辑。等机制,实现了数据库字段与 Java 对象属性的无缝转换。是框架处理 Java 类型与数据库类型之间映射的核心模块,它通过。创建结果集映射的 Java 对象实例(如 POJO、集合等)。为 Java 类型定义别名,简化 XML 配置中的类型名称。处理 Java 类型与 JDBC 类型之间的转换(如。,可以高效处理复杂数据类型,提升代码可维护性和灵活性。MyBatis 的类型系统通过。,管理类型与处理器的映射关系。
2025-05-03 16:01:46
591
原创 【Mytais系列】Datasource模块:数据源连接
模块是 SQL 执行的基础设施,通过高效管理数据库连接的生命周期和池化策略,显著提升系统性能。合理配置数据源类型及参数,结合第三方连接池的高级功能,可确保高并发场景下的稳定性和可扩展性。模块是框架与数据库交互的核心基础设施,负责管理数据库连接的创建、分配、释放及池化,直接影响 SQL 执行效率和资源利用率。(MyBatis 自带)、第三方池(HikariCP、Druid 等)。无可用连接时的等待时间(毫秒,默认 20000)。控制连接的获取、释放、超时检测、有效性校验等。最大活跃连接数(默认 10)。
2025-05-03 16:00:30
1068
原创 【Mytais系列】Update语句执行流程
理解这一流程可帮助开发者合理设计事务边界和缓存策略,避免因缓存未及时清理导致的数据不一致问题。绑定 SQL 参数(支持复杂对象和动态参数)。用户操作入口,封装会话状态和事务控制。执行器,负责缓存清理和 SQL 执行(详细描述的 MyBatis 执行。处理 SQL 语句(创建。管理事务提交/回滚(如。处理二级缓存逻辑)。MyBatis 执行。
2025-05-03 15:58:18
885
原创 【Mytais系列】Select语句执行流程
和缓存更新机制,有助于优化数据访问层设计,平衡性能与数据一致性。的优先级策略,最大化利用缓存提升性能。理解其内部组件协作(如。用户操作 MyBatis 的入口,封装了会话状态和数据库操作。执行器,负责缓存查询和 SQL 执行(分为。详细描述的 MyBatis 执行一条。处理结果集(映射为 Java 对象)。装饰器模式实现,添加二级缓存逻辑。处理 SQL 语句(创建。绑定 SQL 参数。实际执行数据库操作。
2025-05-03 15:56:50
470
原创 【Mytais系列】缓存机制:一级缓存、二级缓存
MyBatis 的缓存机制是其性能优化的重要特性,分为和,两者在作用范围、生命周期和使用场景上有显著差异。
2025-05-03 15:21:50
697
原创 【Mytais系列】核心工作流程
通过这个流程设计,MyBatis 在保持灵活性的同时,提供了比原生 JDBC 更高效、更易维护的数据库操作方案。将 ResultSet 转换为 Java 对象(通过 ResultMap 和 TypeHandler)拦截接口方法调用,将方法名映射为 SQL 语句的唯一ID(namespace.id)将 Java 对象转换为 JDBC 参数(使用 TypeHandler)处理二级缓存(若开启),返回结果给调用方。提交/回滚事务(非自动提交时),关闭资源。SqlSession 内。),管理一级缓存和事务。
2025-05-03 15:19:53
820
原创 【kafka系列】At Most Once语义
通过合理配置,At-Most-Once可为特定场景提供高效、简洁的数据传输能力。若Broker未成功接收消息(如宕机),生产者不会重试,消息直接丢失。执行前崩溃,由于Offset已自动提交,消息不会被重新处理。若消费者拉取消息后,在。
2025-02-15 15:21:01
567
原创 【kafka系列】At Least Once语义
通过合理配置和业务设计,At-Least-Once可平衡可靠性与性能,是大多数场景的推荐选择。若Broker写入成功但网络超时,生产者重试会导致消息重复发送到Topic。失败(如消费者崩溃),下次启动时会重新拉取并处理同一消息,导致积分重复增加。复杂(需生产者、Broker、消费者协同)允许重复的业务(如日志采集)高(事务与协调开销)
2025-02-15 15:11:02
878
原创 【kafka系列】Exactly Once语义
即使在生产者重试、Broker故障或消费者重启等场景下,也能避免数据重复或丢失。正确配置后,Kafka可支持金融支付、实时对账等对数据一致性要求极高的场景。
2025-02-15 14:58:31
666
原创 【kafka系列】Kafka事务的实现原理
正确配置后,Kafka事务可支持金融级场景的精确一次(Exactly-Once)语义。实现跨分区的原子性写入,确保消息要么全部提交,要么全部丢弃。Kafka事务机制通过。
2025-02-15 14:40:28
1493
原创 【kafka系列】Kafka如何实现高吞吐量?
目录1. 生产者端优化核心机制:关键参数:2. Broker端优化核心机制:关键源码逻辑:3. 消费者端优化核心机制:关键参数:全链路优化流程吞吐量瓶颈与调优总结Kafka的高吞吐能力源于其生产者批量压缩、Broker顺序I/O与零拷贝、消费者并行拉取等多层次优化。以下是具体实现机制:2. Broker端优化核心机制: 顺序磁盘I/O: 每个Partition的日志文件()仅追加写入(Append-Only),顺序写速度可达600MB/s(远高于随机写)。
2025-02-15 14:25:02
1111
原创 【kafka系列】Kafka如何保证消息不丢失?
目录1. 生产者端:确保消息成功发送到Broker核心机制:关键步骤:2. Broker端:持久化与副本同步核心机制:关键源码逻辑:3. 消费者端:可靠消费与Offset提交核心机制:关键步骤:4. 全链路保障流程消息丢失的典型场景与规避总结Kafka通过生产者端确认机制、Broker端持久化与副本同步、消费者端可靠消费三个核心环节保障消息不丢失。以下是具体实现机制与步骤:2. Broker端:持久化与副本同步核心机制: 副本机制(Replication): 每个Part
2025-02-15 14:11:26
1498
原创 【kafka系列】日志存储设计 & 消息写入、读取
Kafka的日志存储是其高吞吐、持久化能力的核心设计,其结构包含三部分。orders-0LogLogSegmentKafka消息以**批次(RecordBatch)**为单位存储,每个批次包含多条消息,减少I/O开销。EpochSequence(源码见。
2025-02-15 12:55:16
1230
原创 【kafka系列】消费者重平衡 Rebalance
消费者组重平衡是 Kafka 中动态调整分区分配的关键机制,确保消费者组内成员变动或 Topic 分区变化时,负载均衡和消费进度的一致性。组内其他消费者需接管其分区,重平衡期间消息处理暂停(通常几秒到几十秒)。分区重新分配,原有消费者释放部分分区,新消费者开始消费,期间短暂停顿。在 Kafka 消费者组重平衡(Rebalance)过程中,,直到新的分区分配完成。消费者需分配新分区,重平衡期间暂停消费。频繁停顿会导致消息积压,需优化参数(如。
2025-02-15 12:00:59
1253
原创 【kafka系列】消费者
单次拉取的最小数据量(Broker 等待足够数据后返回,提升吞吐量)。消费者与 Broker 的心跳超时时间,超时触发重平衡。空闲连接超时时间(Broker 主动关闭超时连接)。消费者组 ID(同一组内的消费者共享分区负载)。单次拉取的最大数据量(需小于 Broker 的。无初始 Offset 时的策略:<br>-消费者等待 Broker 响应的超时时间。调用的最大间隔时间,超时触发重平衡。自动提交 Offset 的时间间隔(Value 的反序列化类(同上)。返回的最大消息数(避免内存溢出)。
2025-02-15 11:58:44
976
原创 【kafka系列】生产者
以下是 Kafka 生产者(Producer)在日常开发中的。消息在缓冲区等待时间(毫秒),增大可提升吞吐量(但增加延迟)。生产者缓冲区满或元数据不可用时的阻塞时间(超时抛异常)。:等待所有 ISR 副本确认(最高可靠性)。生产者等待 Broker 响应的超时时间。单个批次的大小阈值,达到阈值后立即发送。SSL 证书路径(客户端认证时需配置)。:等待 Leader 确认(默认)。Value 的序列化类(同上)。:不等待确认(可能丢失数据)。发送失败后的重试次数(建议设为。接口),用于监控或修改消息。
2025-02-15 11:56:06
971
原创 【kafka系列】架构、核心概念
设计目标是高吞吐量、低延迟、可水平扩展,主要用于处理实时数据流。以下是 Kafka 的核心架构和关键概念,帮助你快速理解和使用它。通过动手部署集群、编写生产/消费代码,结合官方文档逐步深入,你可以在实际项目中熟练使用 Kafka!Kafka 的核心优势在于其。
2025-02-09 12:34:32
1276
原创 【kafka系列】Topic 与 Partition
是数据组织的核心概念,它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。假设一个 Kafka 集群有 3 个 Broker(Broker 0、1、2),创建一个 Topic。
2025-02-09 12:19:38
1188
原创 Starrocks 对比 Clickhouse
StarRocks 的数据存储、内存中数据的组织方式,以及 SQL 算子的计算方式,都是列式实现的。4)自适应低基数优化:StarRocks 可以自适应地根据数据分布,对低基数的字符串类型的列构建一张全局字典,用 Int 类型做存储和查询,使得内存开销更小,有利于 SIMD 指令执行,加快了查询速度。为了加速查询速度,业内习惯于把多张表打成一张大宽表,大宽表虽速度快,但是带来的问题是极其不灵活,实时数据加工层是用 Flink 将多表 Join 成一张表写入大宽表。
2025-02-04 23:40:38
984
原创 RocketMq系列02 安装集群 双主双从 docker-compose
文章目录端口号描述服务部署情况环境准备虚拟机创建RocketMq配置文件目录创建broker配置文件broker-master-abroker-master-bbroker-slave-abroker-slave-bDocker-compose文件启动容器启动检查启动状态访问控制台查看集群情况手动创建主题代码发送测试示例代码发送消息SLAVE_NOT_AVAILABLE问题参考链接端口号描述以配置的 ListenPort 为 10911 为例端口号作用描述9876nameser
2022-03-19 18:46:05
2658
原创 RocketMq教程 系列目录
文章目录简介系列目录参考链接简介教程包含rocketmq概念、架构、通信流程、常见应用案例、、实战项目系列目录01 官方文档是最好的入门教程02 安装RocketMq集群 双主双从 docker-compose03 概念、架构模型、通信流程04 常见应用案例 结合Springboot05 事务消息流程分析、样例代码参考链接RocketMq 官方中文文档黑马程序员RocketMQ系统精讲...
2022-02-12 15:49:27
334
原创 RocketMq系列03 概念、架构模型、通信流程
文章目录概念架构模型ProducerConsumerNameServerBrokerServer通信流程参考链接概念消息模型RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储
2022-02-12 15:28:25
1717
原创 RocketMq系列05 事务消息流程分析、样例代码
流程分析上图说明了事务消息的大致方案,其中分为两个流程:正常事务消息的发送及提交、事务消息的补偿流程。1.事务消息发送及提交:(1) 发送消息(half消息)。(2) 服务端响应消息写入结果。(3) 根据发送结果执行本地事务(如果写入失败,此时half消息对业务不可见,本地逻辑不执行)。(4) 根据本地事务状态执行Commit或者Rollback(Commit操作生成消息索引,消息对消费者可见)2.补偿流程:(1) 对没有Commit/Rollback的事务消息(pending状态的消息).
2022-01-27 15:12:14
817
原创 RocketMq系列01 官方文档是最好的入门教程
RocketMq 系列教程(一) 官方文档是最好的入门教程文章目录官方文档中文文档官方文档官方文档中文文档Apache RocketMQ开发者指南可能是因为rocketmq是国人开发的,所以中文文档讲的非常通俗易懂,非常全面,包括相关概念、架构设计、常用代码样例等,相关图解也做的好,能让初学者对rocketmq有个整体的认识。...
2022-01-26 17:48:56
633
原创 RocketMq系列04 常见应用案例代码 结合Springboot
文章目录Spring 结合 RocketMqSpringBoot 结合 RocketMq相关配置同步发送发送字符串发送实体类发送Spring Message对象异步发送集群模式、广播模式延迟消息过滤消息tag 过滤sql表达式过滤批量发送无顺序发送顺序发送指定消息返回类型同步发送异步发送事务消息样例代码参考链接Spring 结合 RocketMq官方使用样例SpringBoot 结合 RocketMqrocketmq-spring-boot-starter 依赖, 将 官方API | Def
2022-01-26 17:39:56
825
原创 IDEA 查找依赖,一键去除某个依赖
文章目录查找依赖去除某个依赖查找依赖idea界面右侧的maven管理,选择某一个项目模块下的dependencies,点击上面的show dependencies或者选择某一个pom.xml文件,右键选择 show dependencies来到界面比如查找logback 依赖,快捷键 Ctrl + F, 输入 logback4.选中某一个依赖,做相关操作去除某个依赖按如上操作进入 dependencies diagram选择某一个依赖,exclue
2021-12-20 10:57:59
11901
2
转载 SpringBoot线程池的创建、@Async配置步骤及注意事项
前言最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了。但是遇到了许多问题,使得@Async无效,也一直没有找到很好的文章去详细的说明@Async的正确及错误的使用方法及需要注意的地方,这里简单整理了一下遇见的问题,Sring是以配置文件的形式来开启@Async ,而SpringBoot则是以注解的方式开启。我们可以使用springBoot默认的线程池,不过一般
2021-12-08 21:03:35
283
转载 线程池使用与参数详细解析
文章目录为什么用线程池线程池ThreadPoolExecutorThreadPoolExecutor提供了四个构造函数向ThreadPoolExecutor添加任务ThreadPoolExecutor的策略常见四种线程池CachedThreadPool()FixedThreadPool()ScheduledThreadPool()SingleThreadExecutor()为什么用线程池创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率例如:记创建线程消耗时间T1
2021-12-05 21:59:51
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人