自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 资源 (2)
  • 收藏
  • 关注

原创 H2数据库中一条insert语句到生成java对象到数据写入磁盘的完整步骤

完整流程示例1. 用户发送 `INSERT` SQL2. 生成 `Insert` 命令对象3. 创建 `Row` 并填充 `Value` 数据4. 更新内存中的 `MVMap`(B+Tree)5. 事务提交时触发: - 写入 WAL 日志(`.trace.db`) - 标记脏页 - 异步线程执行磁盘写入6. 数据最终以分块形式持久化到 `.mv.db` 文件

2025-05-18 10:28:07 878

原创 H2数据库源码学习+debug, 数据库 sql、数据库引擎、数据库存储从此不再神秘

H2数据库源码采用标准Maven结构,核心模块包括SQL解析与执行、数据库引擎、表结构操作、索引实现、存储引擎等。SQL解析通过递归下降解析器将SQL语句转换为抽象语法树,查询优化由Query类和Optimizer负责。存储引擎采用页式存储和事务日志机制,确保ACID特性。MVCC与事务管理通过TransactionStore和LockManager实现多版本控制和行级锁。索引实现包括B-Tree、哈希索引和MVStore的跳跃表结构。

2025-05-18 10:03:57 445

原创 软件系统的可观测性 Observability

传统监控可能无法覆盖所有异常场景,Observability 允许通过数据关联(如“某时段错误率上升” + “相关日志” + “调用链瓶颈”)快速定位问题。在云原生环境中(如 Kubernetes),服务实例动态扩缩容,Observability 提供实时、细粒度的运行状态视图。现代系统(如微服务、容器化架构)依赖众多组件,问题可能跨服务、跨节点发生,需通过链路追踪和上下文日志快速定位根源。避免过度收集数据(如全量日志),采用采样(Sampling)和聚合(Aggregation)减少存储与分析开销。

2025-05-07 20:09:27 560

原创 扩展正则表达式(Extended Regular Expression,ERE)和基本正则表达式(Basic Regular Expression,BRE)的区别

扩展正则表达式(Extended Regular Expression,ERE)和基本正则表达式(Basic Regular Expression,BRE)是正则表达式的两种语法标准,主要区别在于和。

2025-05-07 19:07:19 265

原创 java Servlet Session 本身局限性&解决方案

Java Servlet 的 Session 机制本身并未被废弃,但在分布式系统(如微服务架构、集群部署)中确实存在局限性。不过,这并不意味着它无法在分布式项目中使用,而是需要结合特定技术手段来解决其扩展性和一致性问题。,但在分布式系统中需通过集中式存储(如 Redis)或框架支持(如 Spring Session)解决扩展性问题。对于追求极致无状态的场景,可转向 Token 方案。技术选型应基于实际需求(性能、维护成本、架构复杂度)权衡。pom.xml 添加依赖。

2025-05-03 19:27:36 365

原创 Spring 事务的底层原理&常见陷阱

动态代理 + 事务管理器 + ThreadLocal 是 Spring 事务的核心。自调用、异常处理、传播行为、数据库支持 是常见陷阱。通过代码审查、日志(如 AbstractPlatformTransactionManager 的 DEBUG 日志)排查问题。

2025-05-03 19:20:28 1015

原创 java整则表达式Matcher类核心方法的用法&案例说明

matches() 检查整个字符串是否完全匹配 验证输入格式(如邮箱)find() 查找下一个匹配的子串 提取字符串中的特定模式group() 获取匹配内容或捕获组 解析结构化文本(如日志)start()/end() 获取匹配位置的索引 高亮显示匹配文本replaceAll() 替换所有匹配的子串 批量文本替换appendReplacement() 流式构建替换结果 复杂替换逻辑lookingAt() 检查字符串开头是否匹配 快速前缀验证

2025-05-02 09:09:05 777

原创 用java实现一个简单的sql select 解析器,无需第三方依赖,完全从0开始

以下是一个简单的 SQL SELECT 解析器的 Java 实现,支持单表查询和基本条件过滤。代码包含词法分析和语法分析模块,并支持以下语法:SELECT column1, column2 FROM table WHERE column3 = 5public enum TokenType {SELECT, FROM, WHERE,IDENTIFIER, COMMA, STAR, EQUALS,STRING, NUMBER, EOF}public class Token {public final

2025-05-02 04:30:00 2242

原创 Lucene多种数据类型使用说明

存储词项的位置、偏移量信息,支持高亮(Highlighting)。// 定义 String 类型字段(精确匹配):排序、聚合、分组(类似数据库的列式存储)。:允许一个字段存储多个值(如标签、分类)。:精确值匹配(如 ID、状态码、标签)。:范围查询(如价格、年龄)、排序、聚合。// 定义数值字段(IntPoint)// 存储原始值(需额外存储字段)

2025-05-01 21:35:31 1126

原创 Lucene并不是只有倒排索引一种数据结构,支持多种数据结构

Lucene 的核心机制确实以**倒排索引(Inverted Index)**为核心,但它并不是“全部”都依赖倒排索引。Lucene 的索引结构中还包含其他辅助数据结构,用于支持不同的查询场景。,但为了实现完整的搜索功能,它还依赖其他辅助数据结构。因此,Lucene 的索引是多种数据结构的组合,而不仅仅是倒排索引。,用于实现高效的全文搜索。:支持关键词搜索、短语查询、模糊查询等。:记录每个词项出现在哪些文档中(通过。倒排索引是 Lucene 的。

2025-05-01 21:33:18 950

原创 用spring-boot-maven-plugin打包成单个jar有哪些缺点&优化方案

Fat JAR 的缺点主要集中在 性能开销、维护成本 和 场景适配性 上。建议根据以下场景选择:继续使用 Fat JAR:适合简单应用、快速原型开发或容器化部署(如 Docker + 分层构建)。切换其他方案:若追求极致启动速度 → Spring Native;若需共享依赖 → WAR + Tomcat;若依赖频繁更新 → Docker 分层镜像。

2025-05-01 21:23:26 765

原创 spring-boot-maven-plugin 将spring打包成单个jar的工作原理

核心功能:将 Spring Boot 应用及其依赖打包成一个自包含的 JAR。关键机制:自定义类加载器(JarLauncher)和嵌套依赖结构(BOOT-INF/lib)。优势:简化部署,无需外部 Web 服务器或依赖管理。适用场景:独立运行、容器化部署(Docker)等。

2025-05-01 21:07:20 1371

原创 springboot分层打包,减少重复构建和传输的开销

如果需要调整默认分层逻辑,可以通过。

2025-05-01 20:55:04 905

原创 redis 错误消息: BUSYKEY Target key name already exists.

迁移数据到目标 Redis 实例时,若目标键已存在且未启用覆盖。,但当前操作未明确允许覆盖。错误时,通常是因为你正在尝试覆盖一个。不允许覆盖已存在的键。参数,强制覆盖目标键。命令不允许覆盖目标键。

2025-03-02 14:30:00 323

原创 redis replication 环形缓冲区算法

用于临时存储主节点最近传播的写命令。当从节点短暂断开后重连时,如果所需数据仍在缓冲区中,主节点可以直接发送增量数据,避免全量同步的开销。Redis 的环形缓冲区通过高效的内存管理和偏移量追踪机制,显著提升了主从复制的健壮性和性能。(Partial Resynchronization)的核心机制。(Replication Backlog)是实现主从节点。是避免全量同步的关键。

2025-03-02 03:30:00 1275

原创 redis repl_backlog_first_byte_offset 这个字段的作用

repl_backlog_first_byte_offset` 是 Redis 复制积压缓冲区(Replication Backlog)中的一个关键字段,其作用是。当主从节点断开重连时,Redis 需要通过复制积压缓冲区(一个环形内存区域)快速恢复增量数据同步。积压缓冲区是环形的(类似一个循环队列),当写入数据超过缓冲区容量时,旧数据会被覆盖。(即缓冲区的起始位置对应的全局复制偏移量)。会向前推进(即增加),表示缓冲区的新起点。从节点重连主节点时,会将自己的。(已复制的偏移量)与主节点的。

2025-03-01 22:47:34 270

原创 redis slaveof 命令 执行后为什么需要清库重新同步

如果从节点之前有其他数据(例如曾是其他主节点的副本,或自身是独立主节点),直接保留数据会导致新旧数据混合。主节点的数据状态可能与从节点存在冲突(例如相同的键但值不同),导致数据逻辑错误。

2025-03-01 22:45:37 971

原创 golang panic 函数用法

通过合理使用这两个关键字,可以提升程序的健壮性,避免因未处理异常导致的崩溃。是用于处理运行时异常的关键字。

2025-02-28 16:30:00 283

原创 golang lumberjack 日志包

Lumberjackloglogruszap` 等)结合使用。它的核心功能是自动管理日志文件的切割、备份和清理,避免日志文件无限增长占用磁盘空间。当单个日志文件大小超过设定阈值(如100MB)时,自动创建新文件,旧文件按时间戳重命名备份。支持设置日志文件的最大保留时间(如保留最近7 天的日志),超时文件自动删除。可设置最大备份文件数(如最多保留5 个备份),超出数量时删除最旧的日志。支持并发写入,适用于高并发场景。

2025-02-28 02:45:00 362

原创 Mockito doreturn 和 thenreturn 这两个方法的区别

在于是否会在存根(Stubbing)过程中调用真实方法。都用于设置模拟对象的方法返回值,但它们的。在 Mockito 中,

2025-02-27 19:59:06 267

原创 redis restore 命令的用法

命令生成)恢复为 Redis 的键值。它在数据迁移、备份恢复和跨实例同步等场景中非常有用。,Redis 提供了灵活的数据管理能力,适用于多种运维场景。命令用于将序列化后的数据(通常由。

2025-02-27 19:54:35 622

原创 redis rdb文件格式&解析

Redis的RDB文件是二进制格式的持久化文件,解析需按特定结构逐字节处理。[魔数(5字节)] [RDB版本(4字节)] [数据库数据区] [0xFF] [校验和(8字节)][过期时间(可选)] [LRU/LFU信息(可选)] [类型(1字节)] [键] [值]0xFE [数据库编号] [键值对1] [键值对2] …

2025-02-26 16:00:00 395

原创 redis PSYNC命令详解

PSYNC?-1是 Redis 主从复制中从节点(Replica)向主节点(Master)发起全量同步(Full Resynchronization)的标准命令格式。PSYNC?-1?-1Redis 的PSYNC命令用于主从同步,支持和PSYNC?-1是使用的命令格式,强制触发全量同步。PSYNC?-1?-1主节点收到命令后,会检查参数:因复制 ID 和偏移量无效,主节点判定需全量同步。主节点返回格式:repl_idoffsetforkPSYNC?

2025-02-26 08:53:01 692

原创 redis REPLCONF 命令详解

REPLCONF是 Redis 主从复制(Replication)中用于配置复制流程的内部命令。它主要用于主节点和从节点之间的通信,帮助实现复制状态同步、心跳检测和偏移量确认等功能。以下是REPLCONF。

2025-02-25 16:30:00 763

原创 electron 的原理,使用场景,简单用法

preloadipcMain适合需要同时支持多操作系统的工具类应用(如 VS Code、Figma、Slack)。团队熟悉 Web 技术栈时,可快速构建原型或成熟应用。需同时访问 Web 内容和本地系统资源的场景(如 Git 客户端、聊天工具)。内部管理系统、数据可视化仪表盘等。

2025-02-25 02:00:00 838

原创 Electron支持的存储类型

数据在应用重启后保留(localStorage)或会话期间保留(sessionStorage),复杂数据用 SQLite/IndexedDB。// 渲染进程(如 React/Vue 组件):用户配置、轻量级数据(跨进程、持久化)根据需求选择合适的存储方式,小型配置用。:保存用户配置、日志文件、大型数据文件。:保存敏感信息(密码、API 密钥):简单的键值对存储(仅限渲染进程):结构化数据存储,支持事务和查询。// 渲染进程中打开数据库。// 主进程或渲染进程。:关系型数据、复杂查询。

2025-02-24 16:00:00 705

原创 golang range 的用法

range支持数组、切片、map、字符串和通道的遍历。返回值形式灵活,可选择性忽略索引或值(用遍历 map 时顺序随机,字符串遍历按 Unicode 码点处理,通道遍历需提前关闭。

2025-02-24 02:30:00 1105

原创 redis sentinel配置“sentinel parallel-syncs mymaster 1“详解

当 Sentinel 触发故障转移并选出新主节点后,剩余的从节点需要与新主节点重新建立复制关系(即执行。,可以在故障转移后平衡数据同步速度和主节点稳定性,避免服务雪崩。,目的是避免新主节点因过多并发同步请求导致性能问题。(Redis 默认保守配置,避免新主节点过载)。宕机,Sentinel 触发故障转移,选举。在 Redis Sentinel 的配置中,在 Sentinel 配置文件(如。

2025-02-23 14:00:00 472

原创 redis SLAVEOF NO ONE 命令详解

通过提升从节点为独立主节点实现快速恢复。使用时需严格评估数据一致性、客户端路由及 Sentinel 集成,避免引入运维风险。在自动化高可用场景中,优先依赖 Redis Sentinel 或 Redis Cluster 实现故障切换。是 Redis 中一个关键命令,用于将一个从节点(Replica),停止其复制行为,使其独立处理读写请求。是 Redis 主从架构中。

2025-02-23 02:45:00 748

原创 手动搭建Redis1主2从+ 3 Sentinel 高可用集群

通过以上步骤,您已成功部署一个基于 Redis Sentinel 的高可用集群。Sentinel 会持续监控主节点,并在故障时自动切换至从节点,保障服务可用性。查看 Sentinel 日志文件(如。

2025-02-22 10:06:53 395

原创 go channel 的用法和核心原理、使用场景

Channel 是 Go 并发模型的核心组件,通过通信共享内存的设计哲学,简化了并发编程的复杂性。合理使用无缓冲 Channel 实现同步,有缓冲 Channel 实现异步队列,配合select和 Goroutine 可以构建高效、清晰的并发架构。

2025-02-22 10:03:54 895

原创 redis sentinel 主从切换, sentinel 具体做了那些事?

其核心依赖 Sentinel 节点的共识机制(Raft 算法)和对 Redis 协议的深度控制。合理配置参数和监控是保障切换可靠性的关键。Redis Sentinel 的主从切换流程是分布式系统协作的典型范例,通过。,涉及多个 Sentinel 节点协作完成。Redis Sentinel 的主从切换(故障转移)是一个。

2025-02-21 14:30:00 629

原创 redis sentinel 为什么需要 mastername, 这个字段的作用

它解耦了物理拓扑与业务逻辑,使得 Sentinel 能够高效管理多集群,并实现客户端的动态服务发现。,用于唯一标识一个主从集群(即一组主节点及其关联的从节点)。它的核心作用是为 Sentinel 提供。,使得 Sentinel 能够管理和监控多个独立的主从集群,同时客户端也能通过该名称动态发现主节点。是保障 Redis 高可用架构稳定性的关键。是 Redis Sentinel 中。Redis Sentinel 中的。

2025-02-21 00:45:00 397

原创 Redis sentinel 主从切换可能产生问题&使用场景&注意事项

、多节点部署和监控告警,尽可能降低数据风险。对于关键业务,建议结合业务层的重试机制和数据校验逻辑。Redis Sentinel 是 Redis 官方提供的高可用性(HA)解决方案,主要用于。尽管它解决了单点故障问题,但确实存在一定的数据风险,需要结合场景权衡使用。,适用于对可用性要求高于强一致性的场景。使用时需通过合理配置(如。Redis Sentinel 的核心价值是。

2025-02-20 16:00:00 439

原创 Redis slaveof 主从复制与redis-shake对比

在需要一次性迁移、跨环境同步或数据清洗的场景下,Redis-Shake 是更优选择;是 Redis 原生的主从复制命令,功能强大且高效,但在某些复杂场景下存在局限性。作为专门的数据迁移/同步工具,弥补了。更适合长期主从架构的搭建。

2025-02-20 01:00:00 1015

原创 分布式系统的网络分区故障

网络分区是分布式系统的核心挑战之一,无法完全避免,但可通过合理的架构设计(如 CAP 权衡、多数派决策)和冲突解决机制降低风险。理解网络分区的本质,是构建高可用、强一致系统的关键基础。

2025-02-19 14:00:00 1378

原创 redis sentinel 数据丢失风险

Redis Sentinel 的高可用性依赖于合理的主从复制和持久化配置。数据丢失的风险主要来自异步复制的固有缺陷,而非 Sentinel 本身。通过优化配置和监控,可以显著降低风险。

2025-02-19 02:00:00 484

原创 Lettuce对redis sentinel的支持

Lettuce与Redis Sentinel的交互方式支持直接连接Sentinel节点(用于管理任务)和通过Sentinel自动发现Redis主节点两种模式。RedisURI的必要性两种模式均需提供RedisURI,且支持配置多个Sentinel主机以实现高可用。

2025-02-18 15:00:00 1884

原创 Redis Sentinel

高可用解决方案:Redis Sentinel为Redis提供监控、自动故障转移和配置管理功能,确保集群稳定运行。监控:持续检测主节点(master)和副本节点(replica)的健康状态。自动故障转移:主节点故障时,自动选举并提升副本节点为新主节点。配置提供:作为客户端连接的配置中心,对外提供最新的主节点地址。

2025-02-18 04:15:00 801

原创 Linux fsync 系统调用

在 Linux 中,fsync 是一个关键的系统调用,用于确保文件数据的持久化存储。其核心原理是强制将文件在内存中的修改(即 页面缓存,Page Cache)同步到物理磁盘。

2025-02-17 14:00:00 2478

基于java jdbc 的数据库表结构生成工具 源代码

传统软件项目交付给客户的时候一般需要提供软件所有的设计文档,其中包括数据库设计文档。 数据库设计文档生成工具有很多,但很多时候格式不一定能满足自己项目方的要求,生成后需要自己微调,比较麻烦。 本文介绍一款基于java jdbc 的数据库表结构生成工具,代码简单, 生成文档的原始模板自己可以用word 灵活调整,自主可控。

2024-12-20

dwr 入门例子(eclipse 工程)

这个eclipse 中的一个dwr 无刷新图片显示的例子,属于入门及例子,可以方便的将此例子集成到自己的项目中。

2009-06-05

java 设计模式(简体中文版)

这是一本chm 格式的java设计模式的简体中文电子书,分类清楚,附有代码

2009-06-05

空空如也

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

TA关注的人

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