- 博客(193)
- 收藏
- 关注
原创 ApplicationReadyEvent` 与 `ApplicationReadyEvent
从问题来看,可能是输入时重复了相同的事件名称,实际需要区分的可能是 ApplicationReadyEvent。Spring Boot 启动过程中会按顺序发布一系列事件,用于监听容器生命周期。,所有 Bean 初始化完成,服务(如 Web 服务)已就绪,可接受外部请求。如需进一步对比某一特定事件,请补充具体事件名称,可提供更详细的分析!是 Spring Boot 特有的事件,标志着。
2025-06-13 10:23:04
740
原创 @ConditionalOnProperty
是 Spring Boot 提供的条件注解,用于根据配置文件中的属性值来决定是否加载某个组件(如。,可以实现组件的动态加载,提高配置灵活性。
2025-06-12 17:53:14
286
原创 mybatis-plus的@TableId
是 MyBatis-Plus 中用于指定主键生成策略的枚举类型,位于。,可以高效解决不同场景下的主键生成需求,避免主键冲突和性能问题。
2025-06-10 19:36:01
639
原创 redisTemplate.opsForZSet()
是 Redis 有序集合(Sorted Set)的典型操作,用于获取游戏排行榜前三名玩家。假设我们正在开发一个游戏排行榜系统,每个玩家有一个积分(分数),需要实时展示积分最高的前三名玩家。通过有序集合,可轻松实现各类实时排行榜功能,充分发挥 Redis 的高性能优势。若分数相同,按元素字典序排列(Redis 内部实现)。对于超大规模排行榜(百万级数据),建议使用。若需获取第 4-10 名,可使用。参数或定期持久化到数据库。表示第二名,依此类推。
2025-06-07 11:55:28
402
原创 `submit()` 和 `execute()`区别
根据任务是否需要返回结果、是否需要异常处理来选择合适的方法。在Java的线程池(ExecutorService)中,(默认打印堆栈信息),但不会影响线程池的运行。内部捕获,异常会被传递给线程池的。若任务抛出异常,异常会被封装在。用于提交不需要返回结果的任务(),无法获取任务执行结果。若任务抛出异常且未在。
2025-06-07 10:45:18
318
原创 Redis 的ZADD和ZREVRANGEBYSCORE WITHSCORES命令
向有序集合(Sorted Set)中添加成员,或更新已存在成员的分数。:返回有序集合中指定分数区间内的成员(按分数从高到低排序),并附带分数。(Spring Data Redis)和。以下是 Redis 的。
2025-06-04 14:57:55
303
原创 nacos命名空间
在Nacos中,是一种用于隔离配置和服务的逻辑划分机制,类似于环境(如开发、测试、生产)、租户或项目的概念。命名空间帮助您在同一个Nacos实例中管理多个不同的应用环境或用户群体,避免配置和服务之间的冲突。
2025-06-02 19:30:34
331
原创 注册中心中消费者与生产者的交互机制
注册中心通过服务注册-发现-动态更新的机制,实现了消费者与生产者的解耦。当生产者实例变化时,注册中心与消费者通过心跳检测、事件推送、本地缓存更新等机制协同工作,确保流量始终路由到可用实例,从而实现微服务架构的弹性伸缩与高可用性。这一机制是分布式系统中服务治理的核心基础。
2025-06-01 18:41:54
825
原创 责任链模式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递。收到请求后,每个处理者可以选择自行处理请求,或者将其传递给链中的下一个处理者。这种模式将请求的发送者和接收者解耦,使得多个对象都有机会处理请求。每个步骤都可以选择继续处理或终止流程。
2025-06-01 17:06:45
216
原创 zookeeper的znode是啥
znode是Zookeeper实现分布式协调的基础,通过层级结构、节点类型、版本控制和Watcher机制,为分布式系统提供了数据存储、状态同步和事件通知的能力,广泛应用于服务注册、配置管理、分布式锁等场景。客户端可对znode设置监听(Watcher),当节点被创建、删除、修改或子节点变化时,Zookeeper会主动推送事件通知,用于实现分布式场景下的动态感知(如服务发现、配置变更监听)。路径下创建临时节点(含IP、端口等信息),客户端通过监听该路径获取服务列表,节点删除时自动感知服务下线。
2025-06-01 16:38:27
860
原创 zookeeper的每个znode下存储的端口信息一致么,zookeeper的分布式锁用的临时顺序节点么
在Zookeeper中,znode的端口信息存储和分布式锁的实现方式取决于具体的使用场景和设计方案。除了临时顺序节点,Zookeeper还可通过。,Zookeeper的分布式锁通常使用。)下创建临时顺序节点(如。
2025-06-01 16:37:46
258
原创 MyBatis 与 MyBatis-Plus 的核心区别及示例
MyBatis 是一款优秀的持久层框架,而 MyBatis-Plus(简称 MP)是在 MyBatis 基础上开发的增强工具,提供了更便捷的 CRUD 操作。MyBatis-Plus 在保持 MyBatis 原有功能的基础上,提供了更高效的开发体验,推荐优先使用。MyBatis-Plus:适合快速开发,减少重复代码,尤其适合 CRUD 密集型项目。MyBatis:适合需要完全控制 SQL 的复杂场景,如性能优化、复杂查询。特性 MyBatis MyBatis-Plus。示例对比:用户管理系统。
2025-05-29 19:33:10
169
原创 转账幂等性redis+拦截器
然而,由于网络环境不稳定、客户端重试机制等因素,频繁出现重复的转账请求。需要在子账簿业务系统中实现转账幂等性控制,确保对于已经处理过的转账请求,系统能直接返回之前的处理结果,避免重复处理。具体任务包括设计一套可靠的幂等性控制方案、实现相应的代码逻辑、进行全面的测试和优化,以保证该方案在高并发和复杂网络环境下的稳定性和可靠性,杜绝资金数据差错,提升系统可用性和优化用户体验。提升系统可用性:系统在高并发场景下的稳定性得到显著提升,能够有效处理大量的重复请求,减少了系统的错误率和崩溃次数,提高了系统的可用性。
2025-04-22 00:33:59
323
原创 MeterRegistry监控指标
在 Micrometer(Spring Boot Actuator 中用于指标监控的库)里,MeterRegistry 提供了多种类型的指标记录器,常见的除了 Gauge 和 Counter 之外,还有 Timer、DistributionSummary、LongTaskTimer 等,下面为你详细介绍它们以及它们之间的区别。用途:Counter 用于记录单调递增的计数器,通常用于统计事件发生的次数,比如请求的数量、错误发生的次数等。Gauge 的值可以随时上升或下降,反映的是某个时刻的状态。
2025-04-06 15:14:49
624
原创 线程池调优关键指标与策略
示例:目标QPS=1000,平均处理时间50ms,阻塞占比60% → 核心线程数=1000×0.05/(1-0.6)=125。需求:峰值QPS=5000,平均处理时间20ms,任务不可丢失,CPU核心数=32。队列容量 = 峰值QPS × 容忍时间 = 5000 × 1s = 5000。调整:若任务含大对象(如图片),需缩小队列容量或优化任务内存。核心线程数:基于QPS和处理时间计算,结合CPU核心数调整。拒绝策略:任务不可降级时,需持久化或阻塞等待,但需权衡风险。
2025-04-03 17:14:48
358
原创 线程池调优
若线程数已达上限 → 改用SynchronousQueue(无缓冲队列,强制快速扩容)。增大线程数(如使用线程数 = CPU核心数 × (1 + 平均阻塞时间比例))。核心线程数(corePoolSize)与最大线程数(maxPoolSize)。活跃线程数(activeCount):正在执行任务的线程数量。拒绝任务数(rejectedCount):被拒绝的任务数量。优化:逐步增加核心线程数(如从20→25),观察性能变化。拒绝策略兜底:始终配置合理的拒绝策略(如降级、日志记录)。
2025-04-03 12:50:24
664
原创 基于 Prometheus + Grafana 的数据库慢查询与死锁排查指南
一、监控体系搭建数据库指标采集:MySQL:使用 mysqld_exporter 暴露指标,配置项包括:yaml复制复制yaml复制二、慢查询排查复制sql复制执行计划分析:sql复制三、死锁排查yaml复制。
2025-03-30 23:12:09
438
原创 数据库 CPU 飙高的可能原因及排查指标
大量复杂查询:执行高计算量的 SQL(如聚合、排序、多表 JOIN)。索引缺失或失效:全表扫描导致 CPU 负载升高。锁竞争:行锁、表锁或死锁导致线程阻塞,CPU 空转。配置不当:innodb_buffer_pool_size 过小,频繁磁盘 I/O。并发请求过高:超出数据库处理能力,线程堆积。2. 排查指标与工具阈值(秒)bash复制。
2025-03-30 21:55:14
377
原创 rabbitmq消息积压的线程池调优
这个方案在保证500 QPS稳定处理的同时,提供了良好的可扩展性,当流量增长时可以通过增加消费者线程快速应对。在您的500 QPS场景下,即使是单线程也完全能处理,但使用多线程可以提供更好的弹性。小消息(1KB) 3,000-5,000 10,000-50,000。中消息(10KB) 1,000-2,000 5,000-15,000。大消息(100KB+) 100-500 500-3,000。数据库压力 高(500事务/秒) 中等(25批量/秒)消息大小:通常小消息(1KB以下)吞吐量更高。
2025-03-30 21:13:24
357
原创 Prometheus
若你不想以服务方式启动,也可以手动启动 Prometheus。启动之后,你可以通过浏览器访问 http://localhost:9090 来验证 Prometheus 是否成功启动。若能看到 Prometheus 的 Web 界面,就说明启动成功。执行该命令后,Prometheus 会以前台进程的形式启动,你可以在终端看到详细的日志输出。此命令会将 Prometheus 作为后台服务启动,并且在系统启动时自动运行。若安装成功,会显示出 Prometheus 相关的文件和目录。3. 手动启动(非服务方式)
2025-03-27 00:06:32
511
原创 kafka存储机制
消息读取:消费者从 Kafka 集群拉取消息时,根据指定的主题、分区和偏移量,先从偏移量索引文件中查找消息在数据文件中的位置,然后从数据文件中读取消息内容。它采用稀疏索引的方式,每隔一定数量的消息才会在索引文件中记录一条索引项,通过这种方式可以快速定位到消息在数据文件中的大致位置,然后再进行顺序查找,提高消息的读取效率。然后,消息会被追加到该分区的当前日志段的数据文件中。它可以根据时间戳快速定位到某个时间范围内的消息偏移量,进而通过偏移量索引找到消息在数据文件中的位置,方便按照时间进行消息的查询和消费。
2025-03-26 10:57:27
395
原创 shardingsphere动态添加数据源
ShardingSphere 是一个开源的分布式数据库中间件,支持在运行时动态添加数据源。上述代码展示了如何在运行时动态添加数据源。首先创建新的数据源配置,然后将其添加到现有的配置中,接着更新规则配置,最后重新初始化数据源。实际使用时,要依据具体的业务需求和 ShardingSphere 版本对代码进行调整。按照以上步骤操作,你就能在 ShardingSphere 里动态添加数据库了。ShardingSphere 动态添加数据库的 Java 代码。
2025-03-26 10:54:15
427
原创 orderby重复字段查询
例如,在商品列表页面,用户可以选择按照价格、销量、评价等不同字段进行排序,这样用户可以根据自己的偏好和当前的需求来定制数据的展示顺序,提高用户体验。例如,在电商订单处理系统中,订单可能有不同的状态,如待付款、待发货、已发货、已完成等,按照订单状态的流转顺序进行排序,有助于工作人员清晰地了解订单的处理进度。例如,在新闻资讯类应用中,通常会按照新闻的发布时间来排序,使最新的新闻排在前面,方便用户及时获取最新信息。在这个查询里,首先会按照 score 排序,当 score 相同时,会按照 name 进行排序。
2025-03-25 11:51:22
912
原创 分库分表确定分片数量
在设计 3000万数据的分库分表方案 时,需综合考虑 数据增长趋势、查询模式、硬件资源、业务容忍度 等因素。以下是分库分表的具体方案及核心逻辑分析:一、分库分表的核心原则原则 说明单表容量控制 单表建议不超过1000万行(B+树深度3~4层,查询效率较高)分片键均匀性 避免数据倾斜(如用户ID哈希分片优于按时间范围分片)扩展性预留 设计时预留2~3倍容量,避免频繁扩容跨分片查询最小化 减少跨库/跨表JOIN,优先通过分片键定位数据二、3000万数据的分库分表示例。
2025-03-25 10:57:46
397
原创 JVM起延迟任务
ScheduledExecutorService 是 Java 提供的一个更强大的定时任务执行器,支持多线程执行任务。DelayQueue 是 Java 提供的一个基于优先级队列的延迟任务队列,可用于实现延迟任务。优点:提供了丰富的任务调度和管理功能,支持分布式环境,可实现复杂的任务调度策略。缺点:Timer 是单线程的,如果一个任务执行时间过长,会影响其他任务的执行。Timer 是 Java 提供的一个简单的定时任务工具,可用于执行延迟任务。消息队列支持消息的延迟发送功能,可用于实现分布式延迟任务。
2025-03-24 12:13:18
370
原创 线上服务出问题解决JAVA
建立监控与预警机制:完善对该服务和节点的监控体系,设置合理的监控指标和预警阈值,如服务响应时间、错误率、资源使用率等,以便在问题再次出现时能够及时发现并预警,同时定期对服务的运行数据进行分析,提前发现潜在问题并进行优化。更新或回滚配置与代码:若问题是由最近的配置更改或代码更新引起的,可尝试将配置回滚到之前的正常状态,或者回滚代码版本,以确定是否是新的配置或代码引入了问题。全面测试验证:问题解决后,在测试环境和预发布环境进行充分的测试,确保服务功能正常,性能指标符合要求,且没有引入新的问题。
2025-03-24 10:38:15
351
原创 线上接口响应变慢JAVA
数据库配置优化:调整数据库的配置参数,如内存分配、缓存大小、并发连接数等,以提高数据库的性能。例如,对于频繁调用的外部服务,可以适当降低调用频率,或者设置重试次数和超时时间,以避免长时间等待。异步处理:对于一些耗时的操作,如文件上传、数据处理等,可以采用异步处理的方式,避免阻塞主线程。代码审查:对接口相关的代码进行审查,检查是否存在死循环、复杂的嵌套查询、不合理的算法等问题。SQL 优化:对慢查询的 SQL 语句进行优化,如调整查询语句的结构、添加索引、避免子查询等。
2025-03-24 10:30:34
418
原创 java巡检平台
通过定期的安全审计,及时发现并修复安全漏洞,保障应用的安全性。日志收集与存储:收集 Java 应用产生的各类日志,包括系统日志、业务日志和错误日志等,并将其存储在集中的日志管理系统中,如 Elasticsearch、Logstash 和 Kibana(ELK 栈)。报告生成与展示:巡检完成后,生成详细的巡检报告,以直观的图表和报表形式展示应用的健康状况、性能指标和存在的问题。自动化巡检任务:可以设置定期的自动化巡检任务,按照预设的规则和指标对 Java 应用进行全面检查,减少人工巡检的工作量和人为误差。
2025-03-20 18:35:03
318
原创 java编译
综上所述,这条命令的作用是:使用 JVM 运行 com.example.HeapOOM 类,设置 JVM 堆内存的初始大小和最大大小均为 10 兆字节,当程序发生内存溢出错误时,在当前目录下生成堆转储文件。当你遇到 “错误:找不到或无法加载主类 HeapOOM” 这个问题,通常是由类路径、类未编译、包名、大小写等方面的问题导致的,下面为你详细分析并给出对应的解决办法。java:这是运行 Java 程序的命令,用于启动 Java 虚拟机(JVM)来执行指定的 Java 类。
2025-03-20 18:22:05
640
原创 jstat的jvm说明
gc:显示与垃圾回收相关的堆信息,包括各个区域(新生代、老年代、永久代 / 元空间)的使用情况、垃圾回收次数和时间等。S0U、S1U:Survivor 0、Survivor 1 区的使用量(KB)。S0C、S1C:Survivor 0、Survivor 1 区的容量(KB)。S0C、S1C:Survivor 0、Survivor 1 区的容量(KB)。MCMN、MCMX:方法区(永久代 / 元空间)最小、最大容量(KB)。MC:方法区(永久代 / 元空间)的容量(KB)。
2025-03-19 23:39:49
452
原创 redis数据类型结构
元素较多或长度较长时,采用skiplist和hashtable组合编码,skiplist用于按分数排序,hashtable用于快速查找元素。应用场景:常用于统计网站的 UV(独立访客)、用户行为数据中的唯一元素数量等场景,在不需要精确计数的情况下,能大大节省内存和计算资源。应用场景:在地图应用、物流配送、基于位置的服务(LBS)等领域有广泛应用,可帮助用户快速获取与地理位置相关的信息和进行空间计算。描述:一个有序的字符串列表,元素可重复,通过索引访问元素,支持在列表两端进行插入和删除操作。
2025-03-17 14:53:24
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人