- 博客(395)
- 收藏
- 关注

原创 Redis系列文章全汇总
因为该系列是笔者纯个人梳理总结,所以难免在表述或者知识点说明上有所欠缺,如您发现文中存在任何需要修正之处,请不吝通过下方练习方式告知,笔者将第一时间核实更新。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。系列中比较核心且重要的知识点的文章进行简单的归类汇总,希望对你有帮助。
2025-05-01 23:09:30
741

原创 突破与重塑:逃离Java舒适区,借Go语言复刻Redis的自我突破和成长
这一年来,大家围绕Redis技术点展开的日常提问与积极交流,就像源源不断的动力,极大地激发了我深入钻研Redis的热情。每一次与大家探讨那些复杂的技术难题,每一回解答大家提出的疑惑,都让我对Redis有了更为透彻的认知,也促使我在这条技术探索之路上不断迈进。正是因为有你们的存在,这个交流圈充满了活力与智慧的碰撞。你们的每一个问题,都像是打开新知识大门的钥匙;你们分享的每一种见解,都丰富了我对Redis技术体系的理解。新的一年已经悄然来临,衷心希望我们能够携手并进,在技术的海洋里继续畅游。
2025-01-24 01:19:53
2000
12

原创 聊聊java零拷贝的几种实现
内核函数),从而实现本地数据传输只需将数据从磁盘加载到页缓存,后直接写入到目标文件的页缓存地址,由此减少了切态和用户态到内核态的拷贝开销。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。在之前的文章中,笔者对零拷贝技术进行了比较详细的介绍,而本文将基于之前文章的理论,从。
2024-09-30 08:55:34
1141

原创 基于DynamicDataSource整合分库分表框架Shardingsphere
会出现各种奇奇怪怪的报错,对此笔者结合报错原因查阅网上资料和底层源码运行机制找到了相对简单的适配步骤,遂以此文分享一下整个过程,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。数据源完成了整合,实现多数据源场景下使用分库分表的操作,本文到此结束,希望这套方案对你有帮助。
2024-09-19 08:52:42
892
1

原创 mini-redis如何解析处理客户端请求
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。自此笔者通过一篇文章, 介绍了笔者所实现的mini-redis中协议解析和指令处理的核心流程,希望对你理解笔者的源码有所帮助。协议的本质最简单的方式就是通过抓包的方式查看协议的基本格式和建立连接时的交互逻辑,所以这里笔者也贴出自己在研究。
2024-09-12 08:37:47
1392
原创 Java并发编程哲学系列汇总
本文整理了Java并发编程知识体系,分为基础、进阶和实践三部分。基础篇涵盖线程池、JUC锁、CAS原子类、final关键字、并发容器和流程控制工具等核心概念;进阶篇深入解析AQS、synchronized、volatile、内存模型、ThreadLocal等底层原理;实践篇则聚焦线程池调优、CompletableFuture应用、死锁处理等实战经验。这些内容从基础理论到高级应用,为开发者提供了全面的Java并发编程学习路径和技术参考。
2025-06-03 00:53:36
2855
1
原创 Nacos源码深度解析系列文章导航
本文是作者SharkChili对Nacos源码分析系列文章的导航性总结,包含6篇核心文章链接,内容涵盖Nacos源码环境搭建、服务注册原理、订阅流程、变更推送机制以及SpringCloud负载均衡器解析。作为Java开发者和Java Guide项目维护者,作者提供了公众号和开源项目mini-redis的访问途径,并开放读者交流群入口。文章将持续更新Nacos相关源码解析内容,欢迎读者反馈交流。
2025-05-31 21:03:26
321
原创 深入解析SpringCloud的负载衡器Loadbalancer
本文探讨了Spring Cloud Loadbalancer在集成Nacos后可能存在的服务调用问题及解决方案。作者首先介绍了项目架构及负载均衡算法配置,重点分析了Loadbalancer如何通过Caffeine缓存机制初始化服务实例缓存。 当服务消费者发起调用时,Loadbalancer会先检查缓存,若不存在则通过DiscoveryClientServiceInstanceListSupplier从Nacos获取服务列表并缓存。文章还指出了缓存过期导致的问题,并提出"缓存预热+心跳检测"
2025-05-30 09:16:34
633
原创 Nacos服务变更推送流程全解析
摘要 本文以Nacos 2.3.x为例,分析其服务下线实时推送机制。通过搭建Nacos注册中心架构,包含2个服务提供者和1个消费者,演示了9002端口服务提供者优雅关闭流程:服务提供者通过Spring上下文关闭触发shutdown hook,调用NacosAutoServiceRegistration的deregister方法发起RPC下线请求。Nacos服务端收到请求后,通过事件驱动模型(包括InstanceRequestHandler、NotifyCenter、NamingSubscriberServi
2025-05-29 09:05:41
2292
原创 Nacos服务订阅流程全解析
Nacos服务订阅流程解析 本文基于源码分析了Nacos客户端订阅服务的完整流程。主要内容包括: 客户端发起订阅: 通过NamingService.subscribe()方法发起订阅请求 代理类NamingClientProxyDelegate处理请求,先检查本地缓存,未命中则发起RPC请求 服务端处理订阅: 服务端通过grpcCommonRequestAcceptor接收请求 使用SubscribeServiceRequestHandler处理订阅请求 返回订阅服务的实例信息 客户端处理响应: 将实例信息
2025-05-27 09:31:11
1608
原创 Flink流处理基础概论
以管理员身份运行下方工具创建数据库定制数据库创建数据库直接下一步所有用户使用同一口令配置密码直接下一步8. 直接下一步9. 直接下一步配置字符集16位的gbk下一步完成确认...
2025-05-26 20:00:45
1373
原创 Flink核心概念小结
我们都知道并行流的操作都是基于多线程的,有了多线程自然就会出现互斥和同步问题,所以一旦你使用并行流操作同一个数据时,很可能会造成数据错误的问题。
2025-05-26 12:17:19
2073
1
原创 基于IDEA完成Git指定分支回退
本文介绍了在IDEA中回滚Git分支的操作步骤。首先通过Reset指令强制切换到正确的历史分支(使用hard模式),然后使用命令行git push -f强制提交到远程仓库,从而解决Push Rejected报错问题。最终通过提交记录验证了错误分支的清理效果。该方法适用于需要撤销多个错误提交并回退到正确版本的情况。作者SharkChili还提供了个人开源项目mini-redis和公众号信息,方便读者交流。
2025-05-26 08:43:16
920
原创 Spring Cloud Alibaba服务调用源码调试环境搭建
本文记录了基于Spring Cloud Alibaba搭建Nacos服务提供者与消费者的过程。作者首先通过Git拉取指定版本源码,配置Maven并编译项目。随后创建nacos-provider子模块,引入核心依赖(如服务注册、配置中心、负载均衡等),并启用服务发现功能。架构上采用单机Nacos作为注册中心,两个服务提供者(9001/9002端口)和一个消费者(8080端口)实现负载均衡调用。文中详细说明了版本控制、依赖配置等关键步骤,为开发者调试Nacos源码提供参考。
2025-05-26 08:40:07
1787
原创 线程池优雅关闭的哲学
以字符的形式读取或者写入数据,从而避免一些编码问题。utf8:英文一个字节,一个中文占3个字节。unicode:无论中文英文都占2个字节。gbk:一个英文1个字节,中文2个字节。
2025-05-25 23:32:47
740
1
原创 个人JVM系列文章汇总
本文汇总了作者SharkChili近几年撰写的JVM系列文章,涵盖从基础概念到实战调优的完整知识体系。内容包括JVM内存模型、指令集、垃圾回收机制(如G1)、性能调优、故障排查工具(Arthas)等核心知识点,并提供了多个实战案例。作者作为Java开发者和开源项目维护者,欢迎读者通过公众号或读者群交流讨论。所有文章链接均已整理列出,方便读者系统学习JVM相关技术。
2025-05-24 22:12:16
8478
原创 java线程中断的艺术
所以对于线程的的中断,我们可以采用协作式标识来停止线程,通过任务运行时轮询检测,一旦看到标识设置为true即已请求取消,则提前结束运行。我们通过并发编程提升了系统的吞吐量,特定场景下我们希望并发的线程能够及时的合理的停止,所以就来聊聊java并发编程中中断的哲学。当然这种做法也存在一定的弊端,即面对阻塞的方法,任务可能出现永远无法检查取消标志。特定线程我们不具备打断的职责,一般针对池化线程,我们建议采用内置API进行优雅关闭管理,而非是主动去打断工作过程消费非池化线程。参考java内置方法。
2025-05-24 21:51:09
1077
原创 高效缓存设计的哲学
this代表调用该方法的引用,而super则代表父类对象的引用。当我们在类内部要使用自己的方法时可以使用this,要调用父类方法时,可以使用super。子类编写一个方法参数和名字都和父类一样时,就会执行子类重写的代码,并且我们需要使用@Override关键字注明这个方法是重写的方法。final关键字可以修饰类、方法、变量修饰类,则这个类不可被继承修饰方法则这个方法不可便重写修饰变量,若为引用类型则该引用指向地址不可被修改,但是引用可以被修改。若基础类型则值不可修改。
2025-05-22 13:09:04
870
1
原创 Flink中Kafka连接器的基本应用
我们都知道java8的流操作带来许多便捷,但是某些情况下,某些类型变量无法直接生成流,但我们又希望能够拥有流的便捷操作解决问题,这又该怎么办呢?所以我们就用这篇博客来记录一下这个问题的解决方案。
2025-05-22 11:37:33
2250
原创 并发编程中的对象组合的哲学
用过流编程的小伙伴大概都会写过这样的代码可以看出流让某些规约操作变得很简单,只需我们整理好自己所需要的数据的流,就像上文一样,我们希望创建一个用户名字的列表,我们只需要通过map映射出所有用户名的流,然后使用终端操作即collect方法完成流的最终结果生成即可。本文就是介绍collect中可以传的参数,流收集器,通过各种各样的流收集器,你就可以完成你所需要的数据的收集。
2025-05-22 00:00:33
2009
原创 Kafka快速安装与使用
本文提供了在Ubuntu(Linux)环境下快速安装和配置Kafka的详细步骤,旨在帮助开发者搭建一个用于日常开发和测试的Kafka环境。首先,通过wget命令下载Kafka并解压,随后进行基本配置,包括修改server.properties文件中的IP地址。接着,启动Zookeeper和Kafka服务端,确保服务正常运行。最后,通过启动生产者和消费者进行消息收发测试,验证Kafka的安装和配置是否成功。本文为开发者提供了一个简洁明了的Kafka安装与使用指南。
2025-05-15 19:44:01
8945
1
原创 深入解析JVM中的G1垃圾回收器
G1垃圾回收器是JDK9默认的垃圾回收器,综合了CMS和Parallel Scavenge的优点,采用独特的内存管理策略,实现了整堆维度的内存管理。G1将堆内存划分为多个Region,每个Region可以是Eden、Survivor或Old区,并支持大对象分配到Humongous Region。G1通过少量多次的垃圾回收,充分利用CPU资源,减少内存碎片,并保证较短的暂停时间。G1的Young GC通过标记复制法回收Eden和Survivor区的对象,并通过卡表、记忆集和写屏障解决跨代引用问题。Mixed
2025-05-15 09:27:15
1285
原创 来聊聊JVM中安全点的概念
在正式讲解安全点之前,我们不妨复习一下JVM中垃圾回收的基本过程,我们以CMS垃圾回收器为例,其垃圾回收过程在完成GC Roots初始标记并发回收最终标记(重新标记)并发清除要知道固定可作为GC Roots全局引用:例如常量或者静态变量。执行上下文即栈帧中的变量表。对于现代java应用而言,光是方法区就可能有数百上千兆,所以对于这些起源的引用也并非一件容易的事情。这也就意味着JVM在进行垃圾回收时并不能通过逐个扫描检查来实现。
2025-04-28 00:17:35
4397
原创 mini-redis复刻Redis的INCR指令
类型创建和维护,因为我们本次所复刻的incr和decr所操作的类型是字符串中可转为数值的对象,所以本着数值类型有迹可循的规律以及空间换时间的思想,我们提出池化思想,即将。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。针对字符串类型(可以转数值的情况下,它也会转数值类型),我们都是通过。
2025-04-18 09:22:37
748
原创 深度剖析Seata源码
本文详细分析了Seata分布式事务框架从服务端启动到客户端使用的全流程。服务端启动阶段会创建线程池、基于Netty搭建服务端,并初始化协调者处理事务请求。客户端通过@GlobalTransaction注解开启分布式事务,利用Spring Boot自动装配机制扫描配置。文章建议读者使用Seata 1.4.2版本配合源码调试,并提供了具体配置示例和模块调整说明。作者还介绍了源码阅读方法,包括移除特定模块和修改配置文件的步骤。整体内容涵盖Seata AT模式的核心实现,包括服务端协调机制和客户端注解驱动的事务管理
2025-02-26 00:00:00
1083
1
原创 RocketMQ常见问题与深度解析
通俗来说一个消息消费失败并重试达到最大次数后,MQ就会将其放到死信队列中。超过三天该消息就会被销毁。需要补充的时死信队列是针对一个group id为单位创建的队列,如果一个gourp中都没有死信的话,那么MQ就不会为这个组创建死信队列。
2025-02-19 00:41:54
809
原创 分布式架构洞察与拆解
基于这个架构我们的业务体量有所增加,此时无论是活跃用户数量还是数据量都有所上升,这时候我们一般都会考虑增加资源,于是我们将应用和数据库分离。这样做的好处是让软件和数据库可以专注于各自维度的优化,即应用是对外提供服务的,更着重追求CPU和内存。
2025-02-12 08:53:23
709
原创 分布式事务核心概念小结
C(Consistency):一致性,每次读取到的数据都是实时最新的数据。A(Availability):可用性,每次发起调用都可以得到非错误的正常响应。P(Partition tolerance):分区容错性,即分布式系统遇到某节点或者网络分区故障的时候,系统仍然能够对外提供一致性或者可用性的服务。
2025-02-10 23:34:38
4890
原创 MySQL流式查询的奥秘与应用解析
很久没写开篇了,针对大数据采集分析和导出等功能,我们必须在内存和性能上做好折中,这其中笔者最爱的就是流式查询,而本文将基于多个角度针对流式查询这技能进行深入的分析和演示,希望对你有帮助。磁盘每秒的读写次数,一般以每秒输入输出量为单位进行衡量。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。
2025-02-10 08:35:12
1243
原创 Redisson全面解析:从使用方法到工作原理的深度探索
Redisson是基于原生redis操作指令上进一步的封装,屏蔽了redis数据结构的实现细节,开发可以像操作普通java对象一样使用redis,而本文将针对Redisson中各种使用的数据结构和工具包使用及其实现进行详尽的分析,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。
2025-02-08 23:47:45
1165
1
原创 深度剖析 Redisson 分布式锁:原理、实现与应用实践
红锁是redis作者Antirez提供的一个多节点分布式锁的算法,主要用于解决集群环境下分布式锁一致性问题,其做法大体思路如下客户端设置基于redis服务端获取起始时间,并基于超时时间算出取锁最长等待时间。基于这个时间点向redis集群节点发起上锁请求。当得到半数以上节点同一之后意为取锁成功。执行业务操作。对此我们也给出redissontry{//....
2025-02-08 23:46:00
956
原创 解读MySQL Explain关键字:优化查询执行计划的实用指南
key_len表示使用索引时,对应使用到的索引的长度,在MySQL的EXPLAIN语句中,key_len列表示使用索引的键部分的字节数。通常,key_len越小,性能就越好,因为它意味着需要读取更少的数据块。通过本文的阐述,您将了解如何解读EXPLAIN的输出结果,优化查询执行计划,提升数据库性能,以及避免常见的查询性能陷阱。无论您是初学者还是有经验的数据库专家,本文都将为您提供有价值的见解和实用的技巧,助您在MySQL数据库中更好地利用EXPLAIN关键字,优化查询性能,提升数据库应用的效率和稳定性。
2025-01-24 09:43:19
4367
1
原创 深入解析 Java 泛型的魅力与机制
道通配符是解决泛型之间无法协变的问题,当我们使用一种类型作为泛型参数时,却无法使用他的父类或者子类进行赋值,而通配符就是解决这种问题的对策。通过指定泛型的提升代码抽象等级,提升代码复用性。泛型界定元素的类型避免各种强转操作,且在编译器即可完成泛型检查,提升程序安全性。java是一门伪泛型语言,我们为元素指定泛型之后,实际执行原理是编译后将object强转为泛型设定的类型。
2025-01-23 09:44:12
2723
原创 Go 语言版 Redis 有序集合指令复刻探索
我们试图在 Go 语言的世界里,重新构建起那一套有序集合的指令体系,去挖掘其中的奥秘,去发现语言之间的共通与差异,去挑战自我并拓展技术的边界。返回到的值就是0,即aa位于跳表的第一个元素(除去头节点header),查询逻辑比较简单,通过字典确定是否存在,如果存在则到跳表中查询经过的步数,然后基于这个步数减去1得到元素的实际索引值。例如我们想知道test有序集合的长度,那么我们就可以直接通过zcard test得到结果,对应实现比较简单,在明确有序集合确实存在的情况下,直接返回底层的跳表的。
2024-12-31 08:36:49
1553
4
原创 解析Java集合工具类:功能与实践
二分插入排序法是插入排序法的升级版本,如下所示,我们都知道插入排序后左边的元素都是有序的,如果使用常规二分排序,那么最坏情况下插入时间是O(n),所以我们基于左边有序这个特点改用二分插入的方式完成排序优化了这个问题。在编程的广袤领域中,集合是一个至关重要的概念,它犹如数据的魔法盒子,承载着各种元素的有序或无序组合。这个函数则说明这个数组为不具备随机访问性的链表,为了保证性能,该方法会通过计算的方式得到计算出一个批量移动的区间,然后基于这两个整体进行批量的移动。
2024-12-30 16:15:28
3563
原创 探索数据结构之美——有序集合的内部机制
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。当有序集合删除元素时,除了将该元素从字典中移除,还需要将跳表中关于该元素的指针和索引全部移除,如下图,假设我们要删除。的源码如下所示,以跳表结构为例,该方法首先通过字典定位到这个元素的score,然后通过跳表的。
2024-12-30 08:43:44
2043
1
原创 详解Java并发流程控制工具
希望本次的探索能为你在Java并发编程的道路上点亮一盏明灯,在未来面对各种并发挑战时,你能够熟练运用这些工具,编写出高效、可靠且易于维护的多线程程序,为构建更强大、更具竞争力的软件系统奠定坚实的基础。信号量多用于限流的场景,例如我们希望单位时间内只能有一个线程工作,我们就可以使用信号量,只有拿到线程的信号量才能工作,工作完成后释放信号量,其余线程才能争抢这个信号量并进行进一步的操作。即条件对象,不是很常用或者直接用到的对象,常用于线程等待唤醒操作,例如A线程需要等待某个条件的时候,我们可以通过。
2024-12-24 17:19:12
1218
原创 MySQL LEFT JOIN 性能优化策略
我们现在有一个驱动表customer,它存储客户id、姓名以及出生日期,默认情况下idcustomer有一张关联表,c_id记录着与其关联数据的id,并用记录客户余额,对应DDL假设此时数据库大约有2000w的数据,我们希望查出姓名为的用户的出生日期和可用余额,如果没有记录余额则设置为null,对应我们给出这样一条SQL最终查询结果如下,耗时大约是1s多一些,对于用户而言超过200ms。
2024-12-19 13:49:40
1169
原创 Go 语言下的 Redis 跳表设计与实现
redis中跳表通过score标识元素的大小,通过redis obj维护节点的信息,与此同时为了保证查询的高效,它会为每个节点维护一份随机高度的索引记录当前节点的某个前驱节点:/*跳表节点的定义。
2024-12-12 09:23:06
739
原创 高效索引的秘密:redis跳表设计与实现
Redis 的跳表设计通过多层指针的巧妙运用,不仅实现了高效的查找、插入和删除操作,还保持了较低的空间开销。这种数据结构的优势在于它能够在平均时间复杂度为 O(log n) 的情况下完成上述操作,这使得 Redis 在处理大量数据时依然能够保持高性能。此外,跳表的设计简单直观,易于实现和维护,这也进一步增强了其在实际应用中的吸引力。总之,Redis 跳表的成功案例证明了合理选择和优化数据结构对于构建高效系统的重要性。我是sharkchiliCSDN Java 领域博客专家mini-redis。
2024-12-11 08:56:43
1192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人