- 博客(97)
- 收藏
- 关注
原创 Redis红锁中的看门狗机制
项目Redisson 自动看门狗手动实现简洁性✅ 非常方便❌ 代码复杂安全性✅ 多线程安全⚠ 需小心并发灵活性✅ 支持配置 TTL✅ 可自定义逻辑建议使用✅ 推荐生产使用🧪 适合学习实验。
2025-07-17 19:21:01
784
原创 分布式系统中脑裂问题
脑裂是分布式系统中由于网络故障等原因导致的“主节点多活”现象,是一致性和可用性冲突的极端表现,必须通过仲裁、心跳检测、租约等机制来预防和处理。
2025-07-17 11:27:46
504
原创 redis红锁
Redlock 是一种提升 Redis 分布式锁一致性和容错性的算法,通过多个独立 Redis 实例投票确认,降低因单节点故障或主从延迟带来的锁安全隐患。
2025-07-15 19:03:37
578
原创 延迟双删
延迟双删是一种简单有效的缓存与数据库一致性保护手段,适用于多数读多写少、并发不是极端高的业务系统。对于大规模分布式场景,可结合 Canal、Binlog、消息队列等更强一致性方案。
2025-07-14 20:50:49
869
原创 MySQL实现任意级子目录的主要方案以及区别
方案查询复杂度插入/更新复杂度存储成本适用场景邻接表递归查询,慢简单低数据结构简单,更新频繁路径枚举简单LIKE查询复杂,需更新路径中等读多写少,结构变化不频繁嵌套集合简单范围查询复杂,调整左右值低读多写少,查询性能要求高闭包表简单且灵活维护关联表复杂高需要频繁查询任意层级关系递归CTE(MySQL8+)简单递归查询简单低适合任意层级递归查询,无需额外表。
2025-07-05 11:25:54
355
原创 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
缓存雪崩是指大量缓存中的数据在同一时间过期,导致大量请求同时访问数据库,造成数据库压力骤增,甚至可能导致数据库崩溃。
2025-07-04 20:50:52
1294
1
原创 什么是bigkey
在 Redis 中,BigKey 并不是指某个特定的 Redis 数据类型,而是指那些在内存中占用较多空间的键。一个键的数据量非常大:例如,一个非常大的字符串(几 MB,甚至几 GB)。一个键包含大量元素:例如,一个非常大的哈希(Hash)或集合(Set、List、Sorted Set),包含数百万个元素。BigKey 的问题在于,当你需要操作这个大键时,会占用大量的计算资源,可能导致 Redis 的性能问题或其他操作的延迟。问题描述BigKey 定义占用大量内存或包含大量元素的 Redis 键。
2025-07-02 20:25:33
733
原创 redis实现消息队列
项目List(列表队列)Pub/Sub(广播)Stream(流)消息存储内存(非持久)不存储内存+磁盘持久化消息可重复读否是(所有订阅者)是(消费组)多消费者❌✅ 广播✅ 负载均衡+广播ACK 确认机制❌❌✅ 支持离线可读❌❌✅ 支持场景推荐简单任务队列实时推送高可用、可靠队列。
2025-07-01 20:12:54
982
原创 Redis主从集群
Redis 主从(Master-Slave)集群是一种最基础的集群方式:一台 Redis 作为主节点(Master),负责写操作;一到多台 Redis 作为从节点(Slave),负责读操作并实时同步主节点的数据。Redis 主从集群是最基本的高可用架构,主节点负责写、从节点负责读和备份,但缺乏自动切换机制,推荐搭配 Sentinel 使用。
2025-06-28 11:28:38
510
原创 Redis集群实现方式
Redis 集群是 Redis 官方在 3.0 版本引入的分布式部署方案,它的目标是解决以下几个问题:单个 Redis 实例容量有限(最多只能使用一个服务器的内存)单点故障(单个 Redis 服务挂掉就无法使用)扩展性不足(性能受限于单机)Redis Cluster 是一种去中心化的、基于数据分片和主从复制的高可用、高扩展性的 Redis 分布式解决方案。
2025-06-27 20:51:58
891
原创 Redis持久化机制
Redis 的持久化机制是其在内存数据库基础上实现数据可靠性的关键。RDB 适用于快速备份和恢复,但可能丢失少量数据;AOF 提供了更高的数据安全性,但文件更大,恢复可能较慢。混合持久化结合了两者的优点,是当前最推荐的持久化方案。在实际应用中,应根据业务场景对数据安全性、性能和恢复速度的要求来选择合适的持久化策略。
2025-06-26 20:04:50
754
原创 RabbitMQ是什么?以及优缺点
RabbitMQ 可以用来实现 RPC 模式。生产者发送一个请求消息到队列,并监听一个临时的回调队列。消费者处理请求后,将响应发送到回调队列,生产者从回调队列中获取响应。允许队列中的消息具有不同的优先级。消费者会优先处理优先级更高的消息。这对于某些对实时性有要求的业务场景很有用。你可以将一个队列配置一个死信交换器,然后死信交换器可以将这些“死信”路由到另一个专门的。这对于分析错误消息、处理过期消息或实现重试机制非常有用。
2025-06-24 20:00:01
814
原创 什么是Sentinel?以及优缺点
它特别擅长处理高并发、防止服务雪崩、保障系统稳定性,其**热点参数限流**和**系统自适应保护**是显著优势。微服务中的 **Sentinel** 是阿里巴巴开源的**面向分布式服务架构的高可用流量治理组件**。* **作用:** 当调用某个资源(服务、接口、数据库访问等)出现不稳定状态(如响应时间过长、异常比例升高)时,Sentinel 会在一段时间内对该资源的调用进行熔断(快速失败),避免级联故障。* **作用:** 对请求中的**热点参数**(如特定商品 ID、用户 ID)进行精细化的限流。
2025-06-23 20:44:22
709
原创 TC TM RM介绍
全局事务指挥官,负责事务生命周期管理、状态维护、指令分发(尤其是二阶段)、锁管理(AT)和高可用。它是独立部署的服务端。定义事务边界,开启事务,传播 XID,并根据业务结果决定最终提交或回滚。它集成在发起全局事务的业务应用中。管理本地数据库资源,注册分支,执行一阶段本地操作(含生成 UNDO LOG),报告状态,响应 TC 的二阶段指令执行提交或回滚补偿操作。它集成在所有参与分布式事务的业务应用中。
2025-06-21 11:56:01
831
原创 什么是seata
Seata 是一个强大的开源分布式事务中间件,尤其以其AT 模式的低侵入性、易用性和较好的性能著称。它通过全局事务协调器(TC)事务管理器(TM)和资源管理器(RM)协同工作,利用UNDO LOG 机制实现自动回滚补偿,有效地解决了微服务架构下的数据一致性问题,是构建可靠分布式系统的关键组件之一。
2025-06-20 20:51:37
795
原创 什么是Nacos?
Nacos是云原生时代的服务基础设施,通过统一的平台解决微服务的动态寻址与配置实时更新问题。其开箱即用的特性(尤其是对国内开发者友好的中文文档和控制台)使其成为Spring Cloud Alibaba生态的核心组件,广泛用于企业级微服务架构中。对于需要替代Eureka/Consul+Config组合的方案,Nacos是高效的选择。
2025-06-19 20:07:01
748
原创 什么是Gateway?
在传统的单体应用中,所有的功能都在一个应用里,客户端直接和这个应用交互。但到了微服务时代,一个大应用被拆分成了几十甚至上百个小型、独立的服务,每个服务都有自己的地址和端口。总之,Gateway 是微服务架构中不可或缺的一环,它不仅是请求的入口,更是整个系统的“智能守卫”和“交通管理者”,确保了微服务架构的顺畅运行和高可用性。,接收来自客户端的请求,然后根据预设的规则将请求路由(转发)到后端对应的微服务去处理。Gateway 就是为了解决这些问题而诞生的。
2025-06-18 19:16:21
903
原创 JAVA双亲委派加载机制
双亲委派是 Java 类加载的核心机制,通过逐级向上委派、向下尝试加载,保障了类的一致性和安全性。如 Tomcat 为每个 Web 应用提供独立的类加载器,优先加载自身目录的类,未找到再委派父类加载器。如果父类加载器无法加载(例如父类加载器的搜索范围内没有该类),子类加载器才会尝试自己加载。父类加载器加载过的类,子类加载器不会重复加载,确保类的唯一性。不同层级的类加载器负责不同范围的类加载,形成清晰的边界。允许类加载器网状委派,实现动态模块化加载。始终由启动类加载器加载,全局唯一。
2025-02-20 08:57:19
410
原创 Spring AOP详解
Spring AOP 是一种强大的编程范式,能够将横切关注点从业务逻辑中分离出来,提供了更加清晰、易维护的代码结构。通过 AOP,可以在不修改现有代码的情况下增强功能,提升系统的灵活性与可维护性。
2025-02-15 10:34:04
892
原创 六大原则
详细:此原则强调的是分离关注点,即每个类应该只负责一项功能或行为,并且该类的所有服务都应该紧密围绕这一核心责任。例如,可以通过依赖注入(DI)的方式将具体的实现作为参数传递给需要它的类,而不是让这些类自己去实例化它们所依赖的对象。这有助于降低系统的耦合度,并促进代码的重用。详细:为了满足ISP,我们应该避免创建过于庞大和通用的接口,而是提供多个专门的接口供不同的客户端使用。设计模式的六大原则,即SOLID原则,是面向对象设计中的一组指导性原则,旨在帮助开发者创建更灵活、可维护和可扩展的软件。
2025-02-10 19:34:13
203
原创 Spring Boot 中的监视器是什么
Spring Boot 中的监视器主要是指应用程序的运行时监控功能,通常是通过 Spring Boot Actuator、日志、JMX 等机制实现的。通过这些监控功能,开发者可以轻松地追踪应用程序的健康状态、性能指标及其他运行时信息,从而提高系统的可维护性和可靠性。
2025-02-07 10:22:42
505
原创 SpringBoot Starter的工作原理
Spring Boot Starter 提供了一个方便的方式来集成常见的功能模块,并且通过自动配置和条件加载的机制,大大简化了 Spring 应用的配置过程。开发者只需选择合适的 Starter 依赖,Spring Boot 就会为应用自动配置和初始化相关组件。通过 Starter,Spring Boot 实现了开发快速、配置简洁、易于管理的目标。
2025-02-07 10:06:26
667
原创 Spring Boot 需要独立的容器运行吗
Spring Boot 不需要独立的容器运行,它内置了一个嵌入式的Web服务器(如Tomcat、Jetty或Undertow),所以可以直接作为一个独立的应用程序运行,而不需要外部的Servlet容器。这种情况下,Spring Boot作为一个Web应用运行,但这并不是Spring Boot的推荐方式,Spring Boot鼓励使用内嵌容器来简化部署。总结来说,Spring Boot的优势之一就是不需要独立的容器,它通过内嵌的Web容器来实现独立运行。
2025-02-07 10:01:55
586
原创 Spring Boot 有哪些优点
Spring Boot 是一个非常强大且灵活的框架,极大地提升了开发者的开发效率。通过减少配置和简化开发流程,它使得开发者可以更专注于业务逻辑和功能实现。无论是传统的 Web 应用开发,还是基于微服务架构的开发,Spring Boot 都能提供很好的支持。
2025-02-07 10:01:04
1810
原创 什么是SpringBoot
Spring Boot 极大地简化了 Spring 应用的开发过程,通过提供自动化配置、嵌入式服务器以及生产环境相关功能,使得开发者能够专注于业务逻辑,减少了不必要的配置和部署工作。它是构建现代微服务架构应用和云原生应用的重要工具之一。
2025-02-07 09:59:50
1084
原创 代理模式和适配器模式有什么区别
(Proxy Pattern)和(Adapter Pattern)都是结构型设计模式,它们有不同的应用场景和目标,虽然在某些方面看起来相似,但它们的意图和实现方式有显著的区别。
2025-01-13 20:21:40
1043
原创 设计模式中的代理模式
动态代理允许我们在运行时创建代理对象,而不需要为每一个委托类都编写一个具体的代理类。Java中的动态代理主要分为两种:基于接口的代理和基于子类的代理。在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。当目标对象没有实现任何接口时,可以使用CGLIB库通过继承的方式生成代理类。缺点是对于每个需要代理的目标对象都需要创建一个代理类,这会导致代码膨胀。代理类和目标对象通常实现相同的接口或继承相同父类。在编译时就已经确定了代理类和被代理类的关系。1. JDK动态代理。
2025-01-10 20:15:48
488
原创 java反射
Java 反射是一种强大的技术,使得我们可以在运行时动态地操作类的结构、方法和属性。它主要用于框架开发、动态代理、序列化等场景。尽管反射提供了灵活性,但在性能和安全性上需要谨慎使用。
2024-12-30 18:56:09
438
原创 单例模式的写法
懒汉式:延迟加载,线程安全性差(需要双重检查锁定)。饿汉式:类加载时立即创建实例,线程安全,但浪费资源(如果实例不常用)。静态内部类:延迟加载,线程安全,不存在性能问题,推荐使用。枚举式:最安全、最简洁,JVM 保证唯一性,适合用于单例模式。通常推荐使用静态内部类或枚举式,它们具有较高的性能并能避免常见的错误。
2024-12-27 20:43:53
824
原创 MyBatis动态 SQL 的执行原理
MyBatis 的动态 SQL 提供了强大的功能,使得开发者能够灵活地生成复杂的 SQL 查询。通过使用。
2024-12-26 10:27:59
1642
原创 IBatis和MyBatis在细节上的不同有哪些
特性iBatisMyBatis框架名称MyBatis命名空间基本支持命名空间,功能较弱命名空间支持更强,支持更多复杂情况配置文件只支持 XML 配置支持 XML 配置和注解配置动态 SQL基本支持,表达能力较弱动态 SQL 强大,支持多种标签和条件注解支持不支持注解完全支持注解,简化配置Mapper 接口无原生接口支持支持 Mapper 接口,与 XML 或注解配合缓存机制基础缓存支持强大的缓存支持,包括自定义缓存策略分页查询无内建分页功能内建分页功能或支持第三方插件性能优化。
2024-12-25 14:15:36
642
原创 MyBatisSQL优化
优化 MyBatis SQL 性能的关键是:优化 SQL 语句本身、避免不必要的查询、合理使用缓存、避免 N+1 查询、批量处理操作,以及使用数据库索引和分析执行计划。通过这些优化措施,能够显著提升数据库操作的效率和应用的性能。
2024-12-24 20:25:35
698
原创 MyBatis的一级、二级缓存
一级缓存是 MyBatis 内部的缓存,作用范围是SqlSession。每个SqlSession都有自己的一级缓存,当在同一个SqlSession中执行多次查询时,MyBatis 会将查询结果缓存在SqlSession的一级缓存中。若再次执行相同的查询操作,MyBatis 会直接从缓存中获取数据,而不再访问数据库。二级缓存是 MyBatis 提供的全局缓存,作用范围是Mapper 映射文件。它可以跨多个SqlSession存储数据,通常用于多个请求或多个用户之间共享缓存。一级缓存。
2024-12-23 14:04:32
1211
原创 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
一对一查询:可以通过标签来实现,它适用于一个表的记录与另一个表的记录一一对应的情况。一对多查询:可以通过标签来实现,或者使用嵌套查询(<select>标签)来执行一对多的查询。区别用于映射一对一的关系,而用于映射一对多的关系。联合查询一般适用于一对多的一次性查询,但在复杂查询中可能会出现数据重复或性能问题;嵌套查询则可以将父子表分开处理,但可能会导致多个查询的执行,影响性能。选择合适的实现方式,主要根据查询的复杂度、性能要求和实际业务需求来决定。
2024-12-21 11:32:26
1529
原创 接口绑定有几种实现方式
XML 映射方式:通过在 XML 文件中定义 SQL 语句,并在 Java 接口中声明方法进行绑定。注解方式:直接在 Java 接口方法上使用 MyBatis 提供的注解来定义 SQL 语句。混合方式:结合使用 XML 和注解,注解用于简单的 SQL 操作,XML 用于复杂的 SQL 或动态 SQL。根据项目的需求和复杂性,你可以选择最合适的方式。对于简单的 SQL,注解方式比较直观和方便;而对于复杂的查询和动态 SQL,XML 映射方式更为灵活。
2024-12-20 19:59:14
1145
原创 Mybatis是否支持延迟加载?它的实现原理是什么?
MyBatis 的延迟加载是通过动态代理机制实现的,使用SqlSession在访问时进行后续的查询。配置时,需要启用,并可以通过和标签设置某个属性的延迟加载。延迟加载在提高性能的同时也要注意SqlSession的生命周期和事务管理,以确保懒加载能够正常工作。
2024-12-19 10:00:28
850
原创 什么是MyBatis
MyBatis是一个流行的Java持久层框架(Persistence Framework),它主要用于简化数据库操作,提供了对数据库的映射支持,使得开发人员能够通过简单的配置和映射文件来执行数据库操作(如增、删、改、查等)。MyBatis 继承了传统的 JDBC 编程方式,但通过提供更高层次的抽象,简化了 SQL 执行的过程,避免了大量的样板代码。MyBatis 是一个非常灵活且强大的持久层框架,适用于那些希望精确控制 SQL 执行的 Java 开发者。
2024-12-18 20:21:50
1019
原创 路由传值的几种方式
路由传值的方式多种多样,每种方式都有其适用场景。在选择时,需要根据数据的敏感性、持久性、共享需求以及应用的架构来决定最合适的方式。例如,路径参数适用于传递资源 ID,查询参数适用于过滤和分页,状态管理适用于跨组件共享数据,localStorage 和 sessionStorage 适用于持久化数据存储等。
2024-12-17 20:20:26
1074
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅