自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 基于Redis设计一个高可用的缓存

缓存与数据库双写不一致问题。例如线程A查询缓存为空,然后去读数据库,在读完数据库后,准备写缓存时,系统卡顿了,就在这期间,有一个线程B将数据做了更改,但待系统恢复后,线程A继续执行写入缓存的操作,但此时数据库中的内容已经是线程B更改过的数据了。热点数据突然暴增导致系统奔溃问题。热点数据突然访问过大,同一时刻又几十万、上百万的请求过来,Redis单节点也就能扛10万的并发,这种超大压力,都可能打垮Redis,导致系统崩溃。缓存雪崩问题。缓存雪崩指的是。

2025-09-10 23:19:49 633

原创 Redis的持久化机制RDB和AOF详解

本文为您介绍redis的持久化机制以及持久化的选型。

2025-09-09 13:55:31 1076

原创 使用jedis创建一把高可用的分布式锁

本文介绍了使用Redis实现分布式锁的逐步优化过程。从基础减库存业务开始,分析单机锁的局限性,逐步引入Redis分布式锁。针对锁释放异常问题,通过设置过期时间解决;针对原子性问题,将加锁和设置过期时间合并;针对误删其他线程锁的问题,引入唯一标识验证;最后讨论了仍存在的锁提前释放问题,并指出Redisson的续命锁机制可解决该问题。文章展示了分布式锁从简单到完善的演进过程,为高并发场景下数据一致性提供了实用解决方案。

2025-09-08 15:14:01 814

原创 redo log详解

MySQL的RedoLog是InnoDB实现事务持久性的核心机制,通过WAL策略提升写入性能。它以文件组形式存储,循环写入数据页的物理修改记录,确保崩溃恢复时数据不丢失。配置参数如日志文件大小、数量和刷盘策略需根据业务需求平衡性能与安全性。RedoLog将随机写转为顺序写,支撑高并发写入,同时通过延迟刷盘减少IO压力。合理配置可优化数据库性能,但需避免设置过大日志文件导致恢复时间长等问题。核心业务建议采用最安全的刷盘策略(innodb_flush_log_at_trx_commit=1)。

2025-09-03 15:51:33 1144

原创 MySQL各锁详解以及各锁不同维度的对比

本文系统介绍了MySQL中的锁机制,从概念、目标、关键属性到分类进行了详细阐述。锁主要用于解决并发操作中的数据不一致问题,包括脏读、不可重复读和幻读三大问题。文章从性能维度(乐观锁/悲观锁)、数据操作粒度维度(表锁/页锁/行锁)和数据库操作类型维度(读锁/写锁/意向锁等)进行了分类对比,分析了各类锁的特点、适用场景及实现方式。重点讲解了InnoDB特有的间隙锁和临键锁机制,帮助读者深入理解MySQL锁的工作原理,并指导在实际应用中合理选择锁类型以提高并发性能和数据一致性。

2025-09-03 00:26:16 714

原创 MySQL事务隔离级别选型建议

本文介绍MySQL四种隔离级别的特性及选型建议。通过对比表展示各隔离级别在脏读、不可重复读、幻读方面的表现及性能差异。建议根据业务场景选择:核心交易推荐RR(可重复读),高并发场景可选RC(读已提交),财务审计等强一致性需求使用串行化,临时统计可用读未提交。选型需权衡业务一致性要求、并发压力、系统兼容性和异常容忍度等因素,避免过度追求高隔离级别导致性能问题,或为性能牺牲必要的数据一致性。

2025-09-02 12:56:30 353

原创 SQL优化步骤以及索引失效分析

本文介绍了MySQL中SQL优化的基本步骤和常见索引失效场景。

2025-09-01 11:30:17 498

原创 MySQL中,Select语句的执行流程

2025-08-29 23:00:20 120

原创 kafka之集群工作机制理解

回想一下,我们搭建kafka集群是如何搭建?修改kafka得配置文件,多个Kafka服务注册到同一个zookeeper集群上的节点,会自动组成集群。学习服务端原理,通常我们是去读服务端的那些抽象的代码,但是Kafka为了保证高吞吐,高性能,高可扩展的三高架构,很多具体设计都是相当复杂的。如果直接跳进去学习研究,估计我们很快就会晕头转向。那么有没有一些可见的东西让我们更具体的理解Kafka的Broker运行机制呢?所有Kafka服务都以相同的逻辑运行。

2024-01-18 00:06:47 1114

原创 kafka之java客户端实战

Producer可选的属性都可以由ProducerConfig类管理。比如ProducerConfig.BOOTSTRAP_SERVERS_CONFIG属性,显然就是指发送者要将消息发到哪个Kafka集群上。这是每个Producer必选的属性。在ProducerConfig中,对于大部分比较重要的属性,都配置了对应的DOC属性进行描述。Kafka的消息是一个Key-Value结构的消息。其中,key和value都可以是任意对象类型。

2024-01-13 22:34:49 1693

原创 Kafka之集群搭建

单机服务下,Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是,在实际工作中使用时,单机搭建的Kafka会有很大的局限性。因此,我们需要使用集群。

2024-01-10 22:10:31 2057 2

原创 初识Kafka

kafka主要用于解决大规模数据的实时流式处理和数据管道问题。高吞吐量实时地分发。Kafka消息系统由多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。。可以将数据发布到指定的主题,而可以订阅这些主题并消费其中的数据。同时,Kafka还,可以在管道中通过Kafka Streams API进行流式计算,例如过滤、转换、聚合等。Kafka使用高效的数据存储和管理技术,TB级别。其。

2024-01-08 22:49:59 879 1

原创 zookeeper经典应用场景之分布式锁

在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。

2024-01-06 23:08:12 1015

原创 zookeeper应用场景之分布式的ID生成器

在分布式系统中,传统的数据库自增主键已经不能满足需求。在分布式系统环境中,需要一种全新的唯一ID系统,这种系统不能出现重复ID。ID生成系统是基础系统,被许多关键系统调用,一旦宕机,就会造成严重影响。

2024-01-05 23:06:16 896

原创 Zookeeper之Java客户端实战

zookeeper java客户端实战

2024-01-02 21:54:13 1543

原创 zookeeper之集群搭建

zookeeper集群下,有3种角色,分别是Observer。接下来我们分别看一下这三种角色的作用。领导者(Leader):对于create、setData、delete等有写操作的请求,则要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称为事务。跟随着(Follower)处理客户端非事务()请求(可以直接响应)。转发事务请求给Leader。参与集群Leader选举投票。观察者(Observer对于非事务请求可以独立处理(对于事务性请求会转发给leader处理。

2023-12-30 22:19:37 2316 2

原创 Zookeeper特性与节点数据类型详解

ZooKeeper 是一个开源的,是Apache Hadoop 的一个子项目,。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。ZooKeepe。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理,从而用来维护和监控存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到。

2023-12-26 23:32:54 1817

原创 RocketMQ常见问题分析

而RocketMQ的事务消息机制,实际上只保证了整个事务消息的一半,他保证的是订单系统下单和发消息这两个事件的事务一致性,而对下游服务的事务并没有保证。目前来看,也是业内最好的降级方案。我们需要注意下,在事务消息的处理机制中,未知状态的事务状态回查是由RocketMQ的Broker主动发起的。往MQ发一个延迟1分钟的消息,消费到这个消息后去检查订单的支付状态,如果订单已经支付,就往下游发送下单的通知。最简单的方式是启动一个定时任务,每隔一段时间扫描订单表,比对未支付的订单的下单时间,将超过时间的订单回收。

2023-12-24 22:14:58 1206

原创 SpringBoot整合RocketMQ

1. 创建一个springboot项目,pom文件中引入RocketMQ关键依赖注意:使用SpringBoot集成时,要非常注意版本2. springboot的启动类 3. 在application.properties中写rocketMQ的配置4. 声明生产者,直接使用RocketMQTemplate进行消息发送。 5. 声明一个消费者6. 写一个测试方法,测试发送一条消息7. 测试消费消息启动项目,一直监听消息队列。一旦有消息发送则会消费消息。2.2 往多个topi

2023-12-22 23:14:05 546

原创 RocketMQ单机环境搭建

1. 快速搭建RocketMQ服务2. 快速实现RocketMQ消息收发3. 搭建RocketMQ可视化管理

2023-12-20 23:27:16 1462

原创 Linux环境下安装JDK

本文将介绍在Linux环境下,如何安装JDK。

2023-12-15 21:57:11 256

原创 Spring之AOP理解与应用

面向切面编程:基于OOP基础之上新的编程思想,OOP面向的主要对象是类,而AOP面向的主要对象是切面,在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点,AOP提供了非常强大的功能,用来对IOC做补充。通俗点说的话就是在程序运行期间,

2023-11-28 02:13:39 435

原创 Spring之AOP底层源码解读(更新中)

如果你已经对spring的Aop已经有了基础的认识,那么你一定知道它的底层是用动态代理实现的。作为一个java程序员,我们都知道,实现动态代理的方式有两种,一种是jdk自生提供了一种创建代理对象的动态代理机制,其特点是代理类必须实现了接口;另一种是cglib技术。那么Spring中到底用了哪一种呢?其实spring中这两种代理技术都用到了,它把这两种动态代理的方式进行了封装,封装成的类叫做ProxyFactory,表示是创建代理对象的一个工厂。接下来,我们对AOP的源码进行一个解读。

2023-11-27 23:34:21 273

原创 Spring源码解读之创建bean过程中的加载类、实例化前、实例化

1. 类加载2. 实例化前3. 实例化

2023-11-23 22:51:01 209

原创 Spring源码解读之创建bean

本文章我们会解读一下Spring如何根据beanDefinition创建bean的;

2023-11-22 23:32:09 246

原创 Spring源码解读之生成BeanDefinition

Spring源码解读之生成BeanDefinition

2023-11-21 23:41:56 158

原创 Spring之依赖注入详解

1. 注入方式1.1 手动注入1.2 自动注入

2023-11-12 22:50:47 210

原创 Spring之bean生命周期详解

Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的 。1. bean的生成 过程2. bean的销毁过程

2023-11-08 22:20:35 97

原创 Spring底层核心架构概念详解

spring 底层核心概念

2023-11-05 23:36:56 194 1

原创 一文了解Spring底层整体脉络

在Java语言中,肯定是根据某个类来创建一个对象的。但是getBean方法内部怎么知道"userService"对应的是UserService类呢?所以,我们就可以分析出来,在调用AnnotationConfigApplicationContext的构造方法 时,也就是第一行代码,会去做一些事情:1. 解析AppConfig.class,得到扫描路径。

2023-11-03 23:03:03 166

原创 从最简单的Redis的缓存设计分析高并发下redis缓存的问题与解决方案

缓存雪崩、缓存击穿、缓存穿透

2023-10-31 23:58:38 313

原创 redis高可用集群详解

官方推荐不超过1000个节点。

2023-10-27 23:13:53 385

原创 Redis主从架构与哨兵架构详解

如果一个redis节点提供服务,那么这台redis挂了怎么办?那就会导致所有的请求全都被打到数据库,降低系统的性能。所以,我们需要部署多个redis节点来保证高可用性。redis最常见的保证高可用的方案有三种:主从(master-slave)架构模式、哨兵架构模式和集群架构。本篇文章主要介绍主从架构和哨兵架构。

2023-10-24 22:54:17 378

原创 Redis的高性能与持久化详解

1. 高性能原理2. 持久化2.1 RDB快照(snapshot)2.1.1 bgsave的写时复制(COW)机制2.2 AOF(append-only file)2.2.1 AOF重写2.3 RDB与AOF的比较2.4 Redis 4.0 混合持久化

2023-10-23 23:43:13 95

原创 Redis核心数据结构及应用场景

1. String(字符串)1.1 基本命令1.2 应用场景2. Hash(哈希)2.1 基本命令2.2 应用场景3. list(列表)3.1 基本命令3.2 应用场景4. set(集合)4.1 基本命令4.2 应用场景5. zset(有序集合)5.1 基本命令5.2 应用场景

2023-10-20 22:58:52 126

原创 Fork/Join框架介绍

ForkJoinPool类包括一些重要的方法,例如submit()、invoke()、shutdown()、awaitTermination()等,用于提交任务、执行任务、关闭线程池和等待任务的执行结果。Fork/Join是一个是一个并行计算的框架,主要就是用来支持分治任务模型的,这个计算框架里的 Fork对应的是分治任务模型里的任务分解,Join 对应的是结果合并。这些任务通常可以将大的任务分解成若干个子任务,每个子任务可以独立执行,并且可以通过归并操作将子任务的结果合并成一个有序的结果。

2023-10-16 23:08:09 441

原创 JAVA并发可见性、有序性、原子性与JMM内存模型详解

本地内存是JMM的一 个抽象概念,并不真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。根据JMM的规定,

2023-10-13 23:42:56 200

原创 深入理解线程池ThreadPoolExecutor

1. 为什么需要线程池2.线程池的核心线程数、最大线程数该如何设置3. 线程池的具体实现3.1 线程池执行任务的具体流程3. 2 线程池的五种状态的流转3.3 线程池中的线程的关闭3.4 线程池为什么一定得是阻塞队列3.5 线程发生异常,会被移出线程池吗?4. Tomcat是如何自定义线程池的?

2023-10-11 23:05:59 218

原创 认识阻塞队列

队列是一种线性的数据结构,它的特点有。

2023-10-09 23:14:51 109

原创 深入理解AQS和ReentrantLock

AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队 列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称 AQS)实现的。JDK中提供的大多数的同步器如Lock, Latch, Barrier等,都是基于AQS框架来实现的。一般是通过一个内部类Sync继承 AQS将同步器所有调用都映射到Sync对应的方法。

2023-10-08 22:43:31 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除