- 博客(30)
- 收藏
- 关注
原创 RocketMQ5 基于时间轮的延迟消息
RocketMQ老版本的延迟消息是基于定时任务扫描任务实现的,而RocketMQ 5 的延迟消息是基于时间轮实现的。
2025-08-10 01:05:08
338
原创 十、Redis的过期策略、淘汰策略
我们都知道Redis所有的数据结构都可以设置过期时间,时间一到,就会自动删除。但是当Redis的key过期的时候,具体是怎么处理的呢,如何让这个key失效的?过期策略所有的key的过期时间和key的信息都会存放到一个过期字典里面。这个过期策略有两种,分为主动的和被动的。主动的就是有个定时任务去删除这个节点,被动的就是惰性删除,当访问到这个key的时候,顺带检查其有没有过期,过期了就删除。
2025-06-22 00:01:56
321
原创 七、Redis的持久化策略
Redis这个缓存存放的数据是存到内存的,假如宕机了,那么就会数据丢失。如何避免这种情况呢?由此,Redis推出了两种持久化机制。第一种机制就是以二进制序列形式存储数据的RDB快照,第二种机制就是以命令形式存放的aof日志。那么Redis为什么不推出一种统一的持久化机制,而是采用了两种呢?其实就是对应不同的两种使用场景。设想一种场景,Redis机器重启时,这时候需要重新加载所有的数据来恢复内存。但有一种场景,不需要重新加载数据,而只需要加载的数据。
2025-06-21 15:54:41
384
原创 六、Redis的Pipeline
什么是pipeline?简单来讲就是批处理技术。处理请求时,不会一个一个处理。而是一次性处理一批请求。这种思想在mysql批处理请求中,也有体现。可以看出来管道节省了网络交互次数,等待时间,以及网络资源的消耗。是一种常见的优化性能的方式。
2025-06-18 01:14:23
183
原创 五、Redis的IO模型
在谈及Redis为什么快的时候,很多人都只觉得redis是基于内存,所以快。但他们往往不知道,决定redis快的因素,还有它的IO模型-Reactor模型。谈及Redis的IO模型之前,先补充一下IO模型的基础知识。
2025-06-18 00:49:26
758
原创 四、Redis实现限流
简介:简介:限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时,如何阻止计划外的请求继续对系统施压。系统要限定用户的某个行为在指定的时间里只能允许发生 N 次,如何使用 Redis 的数据结构来实现这个限流的功能?固定窗口比如我们规定我们的一个接口一分钟只能访问10次的话。
2025-06-17 00:29:55
336
原创 二、Redis的分布式锁
分布式锁本质上要实现的目标就是在Redis里面进行一个占位,当别的进程也要来占有时,发现已经有位置了,就只好放弃或者稍后再试。实现指令实现分布式锁的指令是set nx ex。即set if not exists expire的缩写。注意这个指令是一起执行,并不是先执行set nx 再执行ex,因为假如服务设置setnx 时挂了,还没来得及设置ex,那么此时就会没有过期时间。进而导致锁不释放,甚至可能死锁。
2025-06-16 00:58:12
933
原创 一、Redis的五种基本数据结构
Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的value数据。不同类型的数据结构的差异就在于 value 的结构不一样。String的底层结构是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M。
2025-06-15 22:38:54
340
原创 十、Kafka的高吞吐
1.:当生产者发送消息到 Kafka broker 时,这些消息首先被写入到内存中的缓存,即操作系统的 PageCache。PageCache 是操作系统用于缓存文件数据的内存区域,可以显著提高文件读写的性能。2.:消息在 PageCache 中积累到一定量后,Kafka 会异步地将这些消息从缓存写入到磁盘上。这种异步操作意味着消息的写入磁盘过程不会阻塞生产者发送消息的操作,从而提高了整体的处理速度。3.
2025-06-08 19:55:26
511
原创 InnoDB数据页结构
页,它是InnoDB管理存储空间的基本单位,⼀个页的大小⼀般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等。
2025-06-08 17:04:48
121
原创 七、Kafka副本机制
所谓的副本机制(Replication),也可以称之为备份机制,通常是指:分布式系统在多台网络互联的机器上保存有相同的数据拷贝。副本机制有什么好处呢?但Kafka的副本机制只能保证数据冗余,无法提升读性能和其他优点。为什么呢?
2025-04-15 20:35:31
933
原创 六、如何减少Rebalance
Rebalance是Kafka中消费者组(Consumer Group)内部的一个重要机制,指的是消费者实例之间重新分配Topic分区(Partition)的过程。Rebalance的目的是确保消费者组能够均匀地消费数据,从而提高系统的性能和稳定性。
2025-04-15 17:58:10
414
原创 五、Kafka消息删除策略
Kafka数据清理策略是由log.cleanup.policy参数决定的,当前有两种策略,第一种是delete,第二种是compact。
2025-04-15 16:15:17
701
原创 四、 Kafka怎么保证消息不丢失
首先,kafka保证消息不丢失,是由一定限制的。一句话概括,Kafka 只对的消息(committed message)保证不丢失。什么叫做已提交的消息?Kafka的若干个Broker将消息写入日志时,会回调告诉生产者这条消息已经提交。那为什么是若干个 Broker 呢?这取决于你对“已提交”的定义。你可以选择只要有一个Broker 成功保存该消息就算是已提交,也可以是令所有 Broker 都成功保存该消息才算是已提交。不论哪种情况,Kafka 只对已提交的消息做持久化保证这件事情是不变的。
2025-04-14 20:14:11
386
原创 三、消息压缩
可一旦你在 Broker 端设置了不同的 compression.type 值,就一定要小心了,因为可能会发生预料之外的压缩 / 解压缩操作,通常表现为 Broker 端 CPU 使用率飙升。一般情况下这种消息格式转换对性能是有很大影响的,除了这里的压缩之外,它还让 Kafka 丧失了引以为豪的 Zero Copy 特性。因此如果 Kafka 享受不到这个特性的话,性能必然有所损失,所以尽量保证消息格式的统一吧,这样不仅可以避免不必要的解压缩 / 重新压缩,对提升其他方面的性能也大有裨益。
2025-03-20 15:30:03
277
原创 二、消息分区机制
这种分区的理念,在其他中间件也有体现。比如一个主题下有 3 个分区,那么第一条消息被发送到分区 0,第二条被发送 到分区 1,第三条被发送到分区 2,以此类推。消息进入topic,会通过一定的策略,发送到不同的分区。常见的分区策略有下面几种。Kafka 允许为每条消息定义消息键,简称为 Key。轮询策略有非常优秀的负载均衡表现,它总是能保证消息最。分区的作用即是为了负载均衡,提高消费速度。Key 的所有消息都进入到相同的分区里面。随意地将消息放到任意一个分区。Kafka如何定义分区策略?
2025-03-20 11:02:29
235
原创 一、Kafka概念、简介
一个开源的消息引擎系统。A系统发送给消息引擎,B系统接受消息引擎的消息。为什么众多消息引擎,偏偏选择了Kafka呢?性能高、提供了持久化存储的能力。同时Kafka又是个分布式流处理平台。通常来说,有下面两种方式。1.点对点方式:A系统发消息,只发给B系统。其他系统不能接收2.发布/订阅模型:有一个主题TOPIC,发送方可以是很多个。而接收方,也可以是很多个。而Kafka可以基于这两个方式,都能传输消息 削峰填谷。顾名思义,就是说,削减峰值流量,平滑流量曲线,防止一瞬间涌入大量的消息,打爆系统,
2024-12-06 00:20:09
363
原创 自定义注解
一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在等的前面,用来对这些元素进行说明,注释。作用:可以用作标记,配合反射机制,可以实现一个注解达到复用代码的效果。
2024-12-02 00:04:00
305
1
原创 BigDecimal
在项目中,金额的计算通常使用BigDecimal来保证精确计算。BigDecimal可以处理任意长度数字序列的数值,实现了任意精度的浮点数运算。《阿里巴巴 Java 开发手册》中提到:浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。
2024-09-06 00:16:00
675
原创 [多线程] 二:CompletableFuture
CompletableFuture提供了一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。使用场景:多个任务异步执行,互不影响,提高应用的响应速度和吞吐量。提供了不用回调的API、以及可以回调的API。
2024-09-02 00:49:31
749
原创 [多线程] 一:线程池
(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。为什么任务已经堆积很多了,队列满了,才开新线程处理任务?而不是核心线程满了之后,就开新线程执行任务?(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。当任务到达时,任务可以不需要等到线程创建就能立即执行。答:降低资源消耗,防止频繁创建线程。1.线程名前缀:可用于日志排查。CPU密集型:CPU核数+1。最佳实践:动态线程池。
2024-09-01 21:49:01
2131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅