- 博客(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
原创 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 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 的数据库表结构生成工具 源代码
2024-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人