- 博客(113)
- 收藏
- 关注
原创 什么是脑裂?
脑裂是分布式系统中一种特殊的故障状态,当集群中的节点由于网络分区(Network Partition)而无法互相通信时,每个分区都误以为其他节点已经宕机,从而各自形成独立的子集群继续提供服务。这种现象类似于医学上的"分裂脑"症状,因此被形象地称为"脑裂"。
          2025-07-17 08:26:33
           776
776
        
原创 Redis 分布式锁之 RedLock
RedLock 是 Redis 实现分布式锁的一种增强方案,通过在多个 Redis 实例之间“投票”加锁,大大提高了锁的可用性和容灾能力。虽然它不是万能的,但在大多数分布式系统中,是一种非常实用的分布式并发控制技术。
          2025-07-16 08:03:13
           910
910
        
原创 延迟双删懂不
通过MQ(如RocketMQ/Kafka)实现可靠的延迟删除,避免服务重启导致任务丢失。通过合理使用延迟双删,能显著提升系统的数据一致性,尤其在分布式高并发环境中。在缓存(如Redis)和数据库(如MySQL)并存的系统中,经典的。第一次删除缓存后,延迟一段时间再主动从数据库加载最新数据到缓存。(立即删除 + 延迟删除)来减少因并发操作导致的脏数据问题。:在第一次删除后,可能有请求从数据库读到旧数据并回填缓存。(如2s):用户体验下降(读到旧数据时间变长)。第一次删除(立即) + 第二次删除(延迟)。
          2025-07-14 21:30:41
           576
576
        
原创 如何发现Redis中的bigkey?
非常准确,能看到所有大key的详细信息(名字、类型、占多大内存、有多少元素),完全不影响线上。能生成一个列表,按内存占用从大到小排好序,所有超过你设定大小(比如1MB)的key都列出来。Key的数据类型(string, hash, list, set, zset)。集合类型中,单个最大元素的长度(比如Hash里某个field的value长度)。是什么,有多大(比如String多大,List有多少元素)。你的快照文件名(如果不是这个名字,换成你的文件名)。步骤多,需要权限,分析的是某个时间点的数据。
          2025-07-10 20:30:48
           1034
1034
        
原创 Redis实现哨兵模式
Redis Sentinel 在以下场景表现优异:需要高可用的单点Redis部署业务数据量未达到分片需求运维资源有限的场景最终建议:对于关键业务系统,建议 Sentinel + Keepalived 组合使用,实现VIP漂移,达到更高可用性。
          2025-07-03 20:30:08
           756
756
        
原创 Linux实现一主二从模式
etc/sysconfig/network-scripts/ifcfg-ens33 修改文件,默认你的文件是能够正常操作的,注意网关ip,和要修改的ip。),主 数据库可以进行读写操作,并把写的操作同步给从数据库,一般从数据库是只读的。是主机,启动非常简单,配置文件生成位置和之前一样,我们可以通过以下命令 启动。)一个主数据库可以有多个从数据库,而一个从数据库只能属于一个主数据库。从数据库一般都是只读的,并且接收主数据库同步过来的数据。: 复制概念中分为两类数据库,一类是主数据库(
          2025-07-02 16:43:42
           502
502
        
原创 什么是 BigKey?
python= 0:try:size = 0size = r.hlen(key) * 100 # 估算字段平均大小size = r.llen(key) * 100 # 估算元素平均大小continue图表代码关键原则设计阶段预防优于后期修复监控持续化,检测自动化删除操作必须渐进式集群环境分散存储通过合理的数据建模、严格的设计规范和持续的监控优化,可以有效避免BigKey问题,确保Redis高性能稳定运行。
          2025-07-01 20:35:11
           696
696
        
原创 什么是消息队列?
消息队列是现代分布式系统的核心基础设施解耦:系统间通过消息通信,降低依赖异步:提升响应速度,优化用户体验削峰:应对流量洪峰,保护后端系统扩展:灵活增加消费者处理能力学习建议:从RabbitMQ开始实践,掌握基本概念后,根据业务需求选择合适的技术栈。消息队列不是银弹,合理使用才能发挥最大价值。附录RabbitMQ官方教程Kafka官方文档Redis Streams指南。
          2025-07-01 18:38:27
           844
844
        
原创 Redis集群全流程实战指南
Redis集群通过分布式架构完美解决这些问题,本文将带您完成从理论认知到生产部署的全流程实践。建议在实际环境中多练习操作,遇到问题时参考本文的排查指南。cluster-node-timeout 15000 # 适当增大超时时间。repl-backlog-size 512mb # 增大复制缓冲区。:基于Gossip协议的PING/PONG机制。# 从节点7000迁移100个槽到7006。:每个主节点配置1-N个从节点。# 使用redis-cli迁移。:单Key不超过10KB。:16384个逻辑分片。
          2025-06-28 09:41:00
           956
956
        
原创 Redis集群
是官方提供的分布式解决方案,通过数据分片、主从复制和智能故障转移,完美解决上述问题。每个节点负责一部分槽(如节点A管理0-5000,节点B管理5001-10000)。:每个主节点(Master)配置1个或多个从节点(Slave)。节点A的从节点A1发起选举,获得多数节点投票后升级为主节点。:主节点宕机时,从节点通过Raft协议选举为新主。6台服务器(3主3从,或本地模拟6个端口)。:单节点QPS瓶颈(如10万+请求/秒)。节点A(Master)宕机,集群标记其为。:节点间通过Gossip协议交换状态。
          2025-06-27 21:15:28
           509
509
        
原创 什么是Redis?
不仅支持简单的 Key-Value,还有 Hash、Set、ZSet 等,直接解决业务问题(如排行榜用 ZSet 比 MySQL 快 1000 倍)。:可配置将数据保存到磁盘(RDB快照/AOF日志),避免重启后数据丢失。为核心,并提供多种数据结构(如字符串、哈希、列表、集合等)。存储热点数据(如商品信息、用户会话),减轻数据库压力。:数据主要存储在内存中,读写速度极快(微秒级)。(缓存热点数据,提升 10~100 倍性能)。:缓存、排行榜、分布式锁、消息队列、计数器。
          2025-06-26 19:33:14
           304
304
        
原创 深入理解Redis
在现代互联网应用中,高性能、低延迟的数据访问是至关重要的。传统的关系型数据库(如MySQL)虽然功能强大,但在高并发场景下往往成为性能瓶颈。,它凭借极快的读写速度、丰富的数据结构和灵活的扩展能力,成为缓存、会话存储、消息队列等场景的首选解决方案。本文将深入探讨Redis的核心特性、应用场景、高级功能及最佳实践,帮助开发者更好地理解和运用Redis。LPUSH myqueue "task1" # 生产者推送任务。Redis的所有数据都存储在内存中,读写操作在。:记录所有写操作,数据更安全但文件更大。
          2025-06-25 21:32:11
           858
858
        
原创 什么是 Sentinel?
Sentinel是一款开源的流量控制组件,用于解决高并发环境下,微服务系统由于过载、异常、故障等原因可能导致的服务雪崩问题。保证服务的稳定性,防止过载、阻止错误传播,保证业务系统持续可用。流量控制:通过限流、流量隔离来防止服务过载。熔断与降级:通过熔断机制,隔离故障并返回降级的服务。系统保护:基于服务器的负载状态进行自适应的流量保护。Sentinel 作为一款轻量级、高性能的流量控制工具,广泛应用于分布式系统和微服务架构中。
          2025-06-23 20:48:34
           1132
1132
        
原创 Seata模式
全局事务大脑,负责事务生命周期管理核心功能:全局事务的发起与终止分支事务的注册与状态管理全局锁的分配与释放部署方式:独立服务,支持集群部署事务发起方,定义事务边界关键行为:通过注解声明全局事务决定全局事务的提交或回滚与TC保持心跳检测资源管理者,处理分支事务核心职责:向TC注册分支事务报告分支事务状态执行TC的提交/回滚指令管理本地资源(如数据库连接)
          2025-06-21 11:48:58
           850
850
        
原创 什么是Seata?
Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,由阿里巴巴中间件团队于2019年1月发起并开源(最初名为Fescar),后捐赠给Apache基金会孵化3。它旨在解决微服务架构下的分布式事务难题,让分布式事务的使用像本地事务一样简单高效。想象一下这个场景:你去银行转账,操作1是从你的账户扣款1000元,操作2是向对方账户增加1000元。如果操作1成功但操作2失败,你的钱就"凭空消失"了!
          2025-06-20 20:53:46
           325
325
        
原创 理解服务注册与发现
服务注册与发现服务动态性:在云原生环境中,服务实例会频繁地创建和销毁位置透明性:调用方不需要硬编码服务提供方的网络位置负载均衡:能够在多个服务实例间分配请求负载服务注册:服务实例启动时向注册中心注册自己的元数据服务发现:客户端查询注册中心获取可用服务实例列表。
          2025-06-19 20:35:56
           576
576
        
原创 如何实现一个登录功能?
创建一个新的 Java 项目并添加必要的依赖项,例如用于 Web 开发的 Spring Boot 或 Jakarta EE。最后,我们需要保护受保护的资源,例如仪表板,只允许经过身份验证的用户访问。请记住,这只是一个基本示例,实际的登录功能可能需要更复杂的安全措施,例如密码哈希、会话管理和防止跨站点脚本 (XSS) 和跨站点请求伪造 (CSRF) 攻击。如果身份验证成功,我们将用户名存储在会话中,并将用户重定向到仪表板。方法,该方法接受用户名和密码作为输入,并验证这些凭据是否与存储的用户信息匹配。
          2025-06-13 21:31:15
           1084
1084
        
原创 Spring Boot 自动配置原理:从入门到精通
虽然 Spring Boot 提供了大量的自动配置类,但在某些情况下,我们可能需要自定义自动配置。创建一个配置类,并使用注解进行标注。使用注解来指定自动配置的条件。在文件中添加自定义配置类的全限定名。示例:自定义自动配置创建接口和实现类:@Override创建类:@Bean在文件中添加类的全限定名:现在,当 Spring Boot 应用启动时,会自动配置Bean,除非开发者手动配置了Bean。
          2025-06-03 20:23:37
           928
928
           1
1
        
原创 Nginx修改日志时间格式
若需自定义为 YYYY-MM-DD HH:mm:ss。块内全局定义时间变量,避免重复修改。格式,需通过变量提取重组实现。若需兼容旧版本,可在每个。
          2025-05-09 17:16:23
           577
577
        
原创 Spring 框架面试题集:常见问题解析
Spring Cloud 是一套用于构建分布式系统的工具集,它提供了服务注册与发现、负载均衡、断路器、配置管理、消息总线等功能。Spring Cloud 可以帮助开发者构建微服务架构,它与 Spring Boot 无缝集成,简化了分布式系统的开发。
          2025-03-12 20:53:45
           1024
1024
        
原创 Spring如何巧妙解决循环依赖问题?深入浅出解析三级缓存机制
循环依赖(Circular Dependency)就像两个程序员互相等待对方提交代码的场景:A说"我的代码要调用B的类",B说"但我的类需要A的接口定义"。在Spring中具体表现为:@Service@Autowired@Service@Autowired这两个服务类就像"先有鸡还是先有蛋"的问题,传统的对象创建方式根本无法解决这种相互依赖关系。但Spring通过巧妙的三级缓存设计,让这个看似无解的问题迎刃而解。
          2025-03-04 19:43:32
           796
796
        
原创 Spring MVC 的执行流程解析:从用户请求到响应返回
用户发起请求:用户通过浏览器或客户端发起 HTTP 请求。DispatcherServlet 接收请求:Spring MVC 的前端控制器接收到请求并转发。HandlerMapping 查找处理器:DispatcherServlet 根据请求 URL 查找对应的 Controller。Controller 执行业务逻辑:Controller 中的业务方法被调用,进行数据处理、验证等操作。ViewResolver 解析视图。
          2025-02-25 20:45:33
           768
768
        
原创 Spring框架入门指南
Spring是一个轻量级的Java开发框架,由Rod Johnson创建。它主要通过使用JavaBean来实现软件的解耦,简化了Java企业级应用的开发。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。Spring框架是一个功能强大且灵活的开发框架,它通过控制反转和依赖注入简化了Java应用的开发。通过本文的介绍,你已经了解了Spring的基本概念,并搭建了一个简单的Spring Boot应用。希望这篇文章能帮助你更好地入门Spring开发。
          2025-02-17 20:58:13
           935
935
        
原创 spring和mybatis的整合
除了基础的Spring、MyBatis和数据库驱动,推荐添加以下依赖以增强功能:2. 多环境配置(开发、测试、生产)通过Spring的Profile机制实现环境隔离:激活方式:JVM参数:代码中:使用注解驱动配置更简洁:2. 多数据源配置在复杂项目中可能需要连接多个数据库:三、MyBatis高阶特性实战1. 动态SQL与复杂查询在Mapper XML中编写动态SQL:2. 一级与二级缓存配置 一级缓存:默认开启,作用域为SqlSession。在S
          2025-02-15 12:03:36
           649
649
        
原创 集合家族详情
选择集合类型的三要素是否需要排序?是否需要唯一性?主要操作类型(查询/插入/删除)?线程安全策略无竞争:普通集合性能黄金法则预估容量减少扩容避免在循环中频繁创建迭代器复杂对象实现高效的hashCode()方法。
          2025-02-12 18:58:05
           756
756
        
原创 Spring框架中的IoC与AOP原理及代码实践
IoC(Inversion of Control)是一种设计原则,将对象的创建、依赖注入和生命周期的控制权从程序代码转移到外部容器(如Spring容器)。传统开发中,对象直接通过new创建依赖,而IoC通过容器管理对象间的依赖关系,实现解耦。@Aspect@Component// 定义切点:匹配所有Service层方法// 前置通知System.out.println("【前置日志】方法 " + methodName + " 开始执行");// 后置通知(无论是否抛出异常)
          2025-02-11 20:48:42
           963
963
        
原创 spring ioc/aop总结
将日志、事务、权限等横切关注点(Cross-Cutting Concerns)从业务代码中剥离,以“切面”形式统一管理,提升代码复用性和可维护性。:Spring的成功不仅在于技术实现,更在于它倡导的“优雅简化复杂问题”的哲学,这正是每个开发者应追求的境界。),而IOC通过容器统一管理Bean的生命周期,通过依赖注入(DI)自动装配对象间的依赖关系。:只需定义好“积木”(Bean)的规格,由容器自动组装,开发者更关注业务逻辑而非对象管理。:通过抽象共性逻辑为切面,业务代码更纯粹,符合“单一职责原则”。
          2025-02-10 20:53:24
           775
775
        
原创 数据结构和算法
排序稳定性指的是在排序过程中,如果两个元素相等,它们在排序后的相对位置与排序前的相对位置相同。稳定的排序算法可以保持相等元素的相对顺序,而不稳定的排序算法则不能保证这一点。
          2025-02-07 21:47:28
           1029
1029
        
原创 Java并发篇
是一个支持传输操作的队列。它允许生产者在无法立即将元素传输给消费者时等待,直到消费者准备好接收元素。公平锁:按照请求锁的顺序来分配锁,先请求的线程先获取锁。非公平锁:不保证按照请求锁的顺序来分配锁,可能导致某些线程长时间等待。线程池通过复用线程来减少线程创建和销毁的开销。它维护一个线程池,根据任务需求来复用已有线程或创建新线程。
          2025-02-07 10:31:08
           694
694
        
原创 Java虚拟机篇
方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量等。堆(Heap):存储所有的对象实例和数组,是垃圾回收的主要区域。栈(Stack):每个线程私有,存储局部变量、操作数栈、方法返回值等。程序计数器(Program Counter Register):每个线程私有,记录当前线程执行的字节码行号。本地方法栈(Native Method Stack):每个线程私有,用于本地方法的调用。
          2025-02-07 09:29:22
           961
961
        
原创 Java集合篇
HashMap基于哈希表实现,使用哈希函数将键映射到桶中,桶中存储键值对。HashMap的put过程包括计算哈希值、找到桶、如果桶已满则进行扩容、如果发生哈希冲突则链表法解决。当HashMap的负载因子超过一定阈值时,会进行扩容,即创建一个新的更大的数组,并将旧数组的内容复制到新数组中。HashMap的大小是2的n次方,这样可以减少哈希冲突,提高查找效率。
          2025-02-07 09:06:15
           682
682
        
原创 Java基础面试题
Java的跨平台特性主要得益于其运行机制。Java程序首先被编译成字节码(.class文件),然后由Java虚拟机(JVM)解释执行。JVM为Java程序提供了一个与具体操作系统无关的运行环境,因此Java程序可以在任何安装了相应JVM的平台上运行,而不需要重新编译。接口可以定义抽象方法、默认方法和静态方法。抽象方法是没有实现的方法,必须在实现类中实现;默认方法是有实现的方法,实现类可以选择覆盖或继承;静态方法是与实例无关的方法,可以直接通过接口名调用。
          2025-02-07 08:50:52
           942
942
        
原创 Spring框架 了解
Spring是一个开源的应用程序框架和控制反转(IoC)容器,用于简化Java应用程序的开发。它提供了全面的基础设施支持,包括但不限于依赖注入、面向切面编程(AOP)、事务管理等功能,使得开发者可以专注于业务逻辑的实现而非底层架构细节。
          2025-01-17 21:19:27
           990
990
        
原创 MySQL 使用 like “%x“,索引一定会失效吗?
虽然以开头的LIKE查询可能会导致索引失效,但这并不意味着你应该完全避免使用它们。理解何时以及如何使用索引,结合实际情况选择合适的优化策略,才是提高数据库查询性能的关键。希望这篇博客能够帮助你更好地理解MySQL中LIKE查询的工作原理,并为你的日常开发工作带来启发。如果你对这个话题有任何疑问或有自己的见解,欢迎留言讨论!
          2025-01-15 22:51:07
           776
776
        
原创 MySQL 日志:undo log、redo log、binlog 有什么用?
Undo Log:让你可以“撤回”错误的操作,支持事务回滚和MVCC,确保不同用户可以同时访问数据库而不相互影响。Redo Log:为数据库提供了一个“安全网”,确保即使遇到意外情况(如系统崩溃)也能恢复未完成的操作,并且提高了写入效率。Binlog:是一个详细的“日记本”,记录了所有的数据库变更,主要用于数据复制、恢复以及审计分析。
          2025-01-14 20:39:23
           646
646
        
原创 加了什么锁,导致死锁的?
理解死锁及其形成原因和解决方法是非常重要的,尤其是在并发编程和数据库管理中。让我们深入探讨一下具体的锁类型、如何导致死锁的详细过程以及如何预防和检测死锁。
          2025-01-13 21:00:59
           496
496
        
         
      
空空如也
         
      
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
 RSS订阅
RSS订阅