- 博客(134)
- 收藏
- 关注
原创 redis
使用Redisson集群模式,支持主从架构。提供了普通解锁和强制解锁两种方式。包含完整的异常处理和日志记录。基于看门狗机制的自动续期锁。配置了主从切换的容错机制。
2024-11-28 00:49:29 124
原创 高并发系统开发需要注意什么
高并发系统的开发涉及到架构设计、数据库优化、缓存设计、并发控制、服务治理、网络及 IO 优化等多个方面。此外,必须通过监控、日志、压力测试等手段不断优化系统,保证其在高并发情况下的稳定性、可扩展性和安全性。
2024-10-16 15:00:16 503 1
原创 mysql如何发现慢查询sql
long_query_time = 2 # 设置慢查询时间阈值,单位为秒,这里表示查询时间超过 2 秒的被记录为慢查询。通过以上方法,可以及时发现 MySQL 中的慢查询 SQL,以便进行优化和改进,提高数据库的性能。二、使用 SHOW PROCESSLIST 命令。四、分析数据库的性能指标。三、使用性能监控工具。
2024-10-16 12:41:35 489
原创 XXL-JOB 替换 Quartz 定时任务
通过以上步骤,就可以使用 XXL-JOB 替换 Quartz 定时任务,实现定时任务的可视化管理和分布式执行等功能。四、在 XXL-JOB 管理平台配置任务。二、配置 XXL-JOB 执行器。
2024-10-11 18:56:20 465
原创 基于 EasyPOI + RocketMQ+多线程组合方案实现凭证 Excel 文件数据量的平滑导入处理
请注意,上述代码仅为示例,实际应用中你需要根据实际情况调整 RocketMQ 的配置、数据库连接和入库逻辑等。同时,可以根据实际性能需求调整线程池大小等参数。六、创建控制器类用于接收 Excel 文件并触发导入流程。四、创建 RocketMQ 生产者类。五、创建 RocketMQ 消费者类。三、创建 Excel 导入工具类。
2024-10-11 18:52:58 909
原创 将 JVM 垃圾回收算法从 CMS 调整为 G1,同时优化部分 JVM 参 数,比如:线上内存从 6G 调整为 8G、regionSize 从 2M 增加 4M、MaxGCPauseMills 参数
需要注意的是,这些参数的调整需要根据具体的应用场景、负载情况和硬件资源进行测试和优化。不同的应用可能会有不同的最佳参数设置,因此在调整参数后,需要进行充分的性能测试和监控,以确保系统的稳定性和性能得到提升。四、MaxGCPauseMillis 参数从 200ms 调整为 100ms 的原因。三、regionSize 从 2M 增加到 4M 的原因。二、线上内存从 6G 调整为 8G 的原因。一、从 CMS 调整为 G1 的原因。
2024-10-11 18:52:20 242
原创 redis互斥锁setnx是内存级别还是集群级别
如果要在集群环境下实现互斥锁,可以考虑使用 Redis 的分布式锁解决方案,比如使用 Redlock 算法等。Redlock 算法通过在多个独立的 Redis 节点上获取锁来实现真正的分布式互斥锁,确保在分布式系统中的多个节点之间实现可靠的互斥。在 Redis 中,SETNX(SET if Not eXists)操作的互斥锁通常是在单个 Redis 实例的内存级别起作用。如果只使用单个 Redis 实例,SETNX实现的互斥锁只在该实例的内存中维护锁的状态,不能直接在集群级别提供互斥功能。
2024-10-03 00:02:47 281
原创 出于什么考虑去做分库分表,查询是单表查询还是关联查询
总之,分库分表是为了解决数据量增长、性能瓶颈、并发访问和硬件限制等问题。在查询时,应尽量优先考虑单表查询,避免复杂的关联查询,以提高查询性能。如果无法避免关联查询,可以采用一些优化策略来减少查询的复杂度和提高性能。一、分库分表的考虑因素。
2024-10-03 00:01:55 195
原创 缓存穿透加互斥锁
需要注意的是,这种方法虽然可以缓解缓存穿透问题,但也引入了一些额外的复杂性,如需要处理锁的获取和释放、可能的死锁问题等。在实际应用中,还可以结合其他方法,如布隆过滤器,来进一步减少缓存穿透的可能性。缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,进而去数据库中查询也没有命中,导致每次查询都直接打到数据库上,给数据库带来巨大压力。在上述代码中,使用 Redis 作为缓存存储,通过互斥锁来控制对数据库的查询操作,避免大量请求同时穿透缓存打到数据库上。二、代码示例(以 Java 为例)
2024-10-03 00:01:17 277
原创 undolog如何通过三个隐藏字段实现回滚
通过这三个隐藏字段,Undo log 能够有效地跟踪数据的变化历史,并在需要时实现事务的回滚,保证数据库的事务原子性和数据一致性。二、Undo log 实现回滚的过程。一、三个隐藏字段介绍。
2024-10-02 23:46:25 260
原创 mysql提交事务前,redolog,undolog,binlog和数据更改都落入磁盘了么,这个落入磁盘过程是啥
总之,在 MySQL 中,事务提交前,Redo log 和 Binlog 通常会确保写入到磁盘,以保证事务的持久性和可恢复性。Undo log 也会根据需要写入到磁盘,以便支持事务回滚和 MVCC。而数据更改可能不会立即写入到磁盘,而是通过缓冲池和后台线程的管理来逐步写入,以提高性能。不同的配置和存储引擎可能会对这些日志和数据的写入过程有一些差异。一、Redo log(重做日志)二、Undo log(回滚日志)三、Binlog(二进制日志)
2024-10-02 23:38:00 213
原创 如果不开启AllowMultiQueries=true&RewriteBatchedStatements=true,mybatis的insertlist会报错么
总之,不开启AllowMultiQueries=true&RewriteBatchedStatements=true一般情况下不会直接导致insertList报错,但可能会影响性能或在特定数据库环境下出现一些非错误性的警告或性能问题。// 添加要插入的数据对象到列表。
2024-10-02 23:23:13 206
原创 开启AllowMultiQueries=true&RewriteBatchedStatements=true参数配置,通过MyBatis的foreach标签批量插入或更新数据
MyBatis 的 foreach 标签可以循环遍历一个集合,在 SQL 语句中生成批量操作的部分。例如,循环遍历一个用户对象集合,生成多条插入用户数据的 SQL 语句片段。在这个例子中,通过 foreach 标签循环 userList,生成批量插入的 SQL 语句。在配置了相关参数后,这些插入语句会以更高效的方式执行,提高批量写入数据库的性能。假设我们有一个用户表(user_table),包含字段 id 和 username。Mapper.xml 文件。
2024-10-02 23:21:04 292
原创 重写MyBatis 拦截器控制单次写表数量
在这个例子中,如果要插入的用户数据列表大小超过了配置的 batchSize(100 条),拦截器会将数据分成多个批次(每个批次最多 100 条数据)进行插入操作,这样可以避免一次性写入大量数据导致数据库 CPU 负载过高的问题。// 定义拦截器,拦截Executor的update方法。可以在这里配置 batchSize 参数。Mapper.xml 文件。
2024-10-02 23:20:00 267
原创 jvm三色标记算法
总之,三色标记算法是一种高效的垃圾回收标记算法,通过并发标记和写屏障等技术,减少了垃圾回收的停顿时间,提高了系统的性能和响应性。但同时也需要处理好浮动垃圾和漏标等问题,以确保垃圾回收的正确性。JVM(Java 虚拟机)中的三色标记算法是一种用于垃圾回收的标记 - 清除算法的改进版本,主要目的是提高垃圾回收的效率并减少停顿时间。三、可能出现的问题及解决方案。
2024-10-02 23:11:05 190
原创 线程死锁如何检测
总之,通过工具和代码中的方法可以检测 Java 应用程序中的线程死锁情况,以便及时发现和解决问题。一、使用 JConsole 或 VisualVM 等工具。
2024-10-02 23:07:11 498
原创 JVM如何通过线程堆栈信息找出死锁的线程?
通过以上步骤,可以从线程堆栈信息中找出死锁的线程以及导致死锁的关系,从而有助于进一步分析和解决死锁问题。二、分析堆栈信息找出死锁线程。一、获取线程堆栈信息。
2024-10-02 22:59:54 304
原创 try with resource适合什么数据结构
try-with-resources” 语句在 Java 中适用于实现了AutoCloseable或Closeable接口的资源。总之,“try-with-resources” 适用于任何实现了AutoCloseable或Closeable接口的资源,这有助于确保资源在使用后正确关闭,避免资源泄漏,并使代码更加简洁和易于维护。// 读取输入文件并写入输出文件的操作。// 使用套接字进行通信的操作。// 处理结果集的操作。// 打开资源的操作。
2024-10-02 22:55:04 280
原创 查看MySQL集群里哪些连接占用cpu,内存比较大方法
使用:查看所有活跃连接,筛选出占用时间较长的查询。使用和:分析当前事务、查询的资源使用情况。使用操作系统工具:如toppidstatpmap等,查看 MySQL 进程和线程的资源消耗情况。使用 MySQL 查询性能工具:如EXPLAIN和,分析具体查询的执行计划和资源消耗。优化高消耗的查询和连接:通过索引优化、表分区、调整数据库配置等方法,优化资源消耗。通过这些方法,你可以有效识别并优化 MySQL 集群中占用大量 CPU 和内存的连接或查询,提升数据库的整体性能。
2024-10-02 22:11:08 1261
原创 如何定位并优化慢sql
定位慢 SQL:通过启用慢查询日志、使用数据库监控工具、分析应用日志等方式找到执行缓慢的 SQL 语句。分析查询瓶颈:使用EXPLAIN或分析查询的执行计划,检查是否存在全表扫描、索引使用不当、锁争用等问题。优化 SQL:通过添加或优化索引、重构查询、调整数据库配置、分区表、缓存等方式提升 SQL 性能。持续监控与优化:持续监控数据库性能,定期重构查询,确保系统性能随着数据增长保持稳定。通过这些步骤,你可以有效地定位并优化慢 SQL 查询,确保数据库查询的高效性和系统的稳定性。
2024-10-02 22:03:53 1082
原创 JAVA线上查询报错如何定位问题
定位 Java 应用系统的线上查询报错问题,通常需要从多个层面进行排查,包括日志分析、分布式追踪、数据库排查、系统资源监控、网络排查等。查看日志:分析应用程序的日志,尤其是异常堆栈和 SQL 查询相关日志。分布式追踪:通过分布式追踪工具查看跨服务调用链中的异常。数据库检查:查看数据库日志、执行 SQL 查询,分析是否有慢查询或连接池问题。系统资源监控:检查服务器的 CPU、内存、磁盘 I/O 以及 JVM 的 GC 状态。网络与依赖服务:检查网络延迟和依赖服务的可用性。调试与重现。
2024-10-02 21:56:51 782
原创 JAVA应用系统如何保证稳定性
Java 应用系统的稳定性需要从多个方面着手,包括架构设计、代码优化、性能调优、监控体系以及自动化测试。通过合理的设计和工具的使用,可以有效提高系统的稳定性、可靠性和可维护性,确保系统在高并发和高负载下依然能够平稳运行。
2024-10-02 21:47:02 1437
原创 JAVA应用超时了有什么好的设计应对么
重试机制可以增加请求成功的概率,但需要限制重试次数并防止过度重试。熔断器保护系统免受频繁超时导致的压力,防止故障蔓延。降级处理和缓存提供了备选方案,在服务不可用时,仍然能给用户提供部分功能。合理的超时设置和异步调用可以避免阻塞和资源浪费。通过这些设计模式,你可以在不同场景下有效地处理超时问题,提升系统的稳定性和用户体验。
2024-10-02 21:36:16 819
原创 zookeeper是啥,如何进行故障转移
Zookeeper 是一个强大的分布式协调服务,广泛应用于大规模分布式系统中,如 Hadoop、HBase、Kafka 等。通过多节点集群和自动故障转移机制,它能够保证高可用性和一致性。为了正确处理故障转移,集群需要合理的配置和监控,并且要根据实际情况调整参数。
2024-10-02 21:27:09 699
原创 除了 InheritableThreadLocal,还有哪些方法可以在父子线程间传递变量?
二、使用线程池的上下文传递机制(如果适用)一、通过构造方法传递。
2024-10-01 22:58:04 242
原创 主线程里和子线程里同时使用一个变量,该使用什么threadlocal
但需要注意的是,InheritableThreadLocal在某些复杂的线程模型下可能会出现问题,比如在线程池环境中,如果线程被复用,子线程可能会保留上一次任务执行时从父线程继承下来的值,从而导致意外的结果。ThreadLocal为每个线程维护一个独立的变量副本,不同线程之间互不干扰。而InheritableThreadLocal在创建子线程时,会将父线程中的InheritableThreadLocal变量的值复制到子线程中,使得子线程可以访问父线程中设置的变量值。
2024-10-01 22:56:10 238
原创 JAVA在某个代码前后加监控,如何实现
在这个示例中,定义了一个切面类MonitoringAspect,它会监控com.example.service包下所有方法的执行时间,并将执行时间记录到日志中。一、使用 AOP(面向切面编程)框架。二、使用编程语言的内置特性。
2024-10-01 22:52:20 249
原创 redis集群存储是啥,发生碰撞咋办
总之,Redis 集群存储是一种强大的分布式存储架构,可以有效地解决高可用性、可扩展性和高性能的问题。当发生碰撞时,可以通过重新计算哈希值、哈希槽迁移、增加节点和优化数据结构等方法来解决。Redis 集群存储是一种分布式的 Redis 存储架构,它将数据分散存储在多个 Redis 节点上,以实现高可用性、可扩展性和高性能。一、Redis 集群存储的特点。二、当发生碰撞时的解决方法。
2024-10-01 22:32:38 268
原创 hash结构有什么优点
综上所述,哈希结构以其快速查找、高效插入和删除、灵活的键值对存储、高空间利用率和支持多种操作等优点,在计算机编程中得到了广泛的应用。三、灵活的键值对存储。
2024-10-01 22:28:25 249
原创 git下载playwright后如何安装
克隆仓库安装 Playwright安装浏览器验证安装:运行一个简单的脚本以确认一切工作正常。通过这些步骤,你应该可以从 GitHub 克隆的源码成功安装和使用playwright。如果有其他问题,请继续提问!
2024-09-30 19:52:14 305
原创 举出JVM调优的例子
JVM 调优是一个复杂的过程,涉及到内存管理、垃圾回收、线程与并发、类加载等多个方面。通过合理地配置 JVM 参数,可以显著提升 Java 应用程序的性能。
2024-09-26 21:10:52 1026
原创 kafka和rocketmq出现数据不一致情况,如何解决,给出实际代码
在分布式消息系统中,和都是常用的消息队列系统,它们在不同场景下有各自的优势。
2024-09-26 20:50:44 716
原创 反射和动态代理有什么区别
反射和动态代理是 Java 中两个密切相关的概念,它们都涉及到在运行时操作类、方法和对象,但它们的用途、实现方式和使用场景有着显著的区别。以下是对这两个概念的详细对比。反射是 Java 提供的一种机制,允许程序在运行时动态地获取类的结构信息(如类名、字段、方法、构造函数等),并且可以在运行时创建对象、调用方法、访问和修改字段。反射使得程序可以在编译时不需要知道类的定义即可操作对象。常用类:、、、 等。动态代理是 Java 提供的一种机制,允许在运行时动态地生成代理类,并将对接口方法的调用委托给代理类的处理器
2024-09-26 19:45:03 687
原创 dubbo原理,如何实现服务调用
Dubbo 的服务调用原理基于模型,通过动态代理、网络通信、负载均衡、容错机制等实现了分布式服务之间的透明调用。其核心过程包括服务的注册与发现、服务的远程调用以及服务结果的返回。动态代理:Dubbo 使用动态代理技术将本地方法调用转换为远程调用。服务注册与发现:通过注册中心管理服务的注册与发现。负载均衡与容错:Dubbo 提供多种负载均衡和容错策略,确保服务调用的高可用性。网络通信:基于 Netty 的高效网络通信框架,支持多种协议和序列化方式。
2024-09-26 19:41:48 839
原创 shardingsphere分库分表跨库访问原理
分片规则:根据分片键和分片算法,将数据分片到不同的数据库和表。SQL 路由:根据分片规则,ShardingSphere 会将 SQL 路由到具体的库或表。SQL 改写:ShardingSphere 会对 SQL 进行改写,使其指向正确的分片。并行执行:对于跨库查询,ShardingSphere 会将 SQL 并行分发到多个数据库执行。结果归并:ShardingSphere 会将多个库的查询结果进行合并,返回给应用层。事务管理:ShardingSphere 支持多种事务机制,保证跨库操作的一致性。
2024-09-26 18:54:01 1066
原创 JAVA如果是跨库处理数据,如何使用事务呢
XA 分布式事务:适用于需要强一致性的场景,但性能较差。TCC 模型:适用于对性能要求较高的场景,但需要手动实现幂等性和补偿操作。Saga 模型:适合那些需要长时间运行的事务,保证最终一致性,但要求业务具备可补偿性。本地消息表:适合最终一致性的场景,通过异步消息机制保障一致性,性能较好。每种方案都有其优势和局限,选择时需要权衡一致性、性能和实现复杂度。
2024-09-26 18:32:54 1075
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人