
Java核心技术精讲
文章平均质量分 95
你好,我叫sharkchili,目前还是在一线奋斗的Java开发,经历过很多有意思的项目,也写过很多有意思的文章,是CSDN Java领域的博客专家,也是Java Guide的维护者之一,本专栏是我结合面试和被面试整理的一套涵盖Java核心的技术的技术博文。
shark-chili
这个作者很懒,什么都没留下…
展开
-
深度剖析Seata源码:解锁分布式事务处理的核心逻辑
多个服务节点协同工作时,如何确保一系列相互关联的操作要么全部成功提交,要么全部回滚,避免出现部分成功部分失败导致的数据不一致情况,这是众多开发者需要直面的挑战。对应的我们给出这块逻辑的核心入口代码,即位于Server的主函数入口的main方法,可以看到seata服务端的创建是基于netty完成的,完成创建和初始化之后就与协调者。它巧妙地将分布式事务处理的复杂逻辑进行抽象,通过。方法,该方法会通知TC驱动全局事务提交,而TC收到该请求之后,就会驱动各个分支事务提交事务,每个分支事务收到该请求后就会删除。原创 2025-02-26 00:00:00 · 1065 阅读 · 0 评论 -
聊聊ElasticSearch性能调优
在分布式集群环境下,es每次写入必须所有副本节点完成同步后才会返回,所以为了索引等工作的效率,我们建议集群节点数也尽量不要超过3个,甚至说像是内部ELK日志系统、分布式链路追踪等场景副本数可以直接设置为1个,通过减少从节点个数避免主从同步的时间开销,提升系统执行效率。所以,为了保证写入时的效率,一般情况下我们建议服务器尽可能采用。的操作,需要补充的是,当我们的分片集群查询会经常得涉及排序、归并、聚合、过滤等需要需要在内存中进行运算的工作时,优先考虑多的具有多个内核的现代。原创 2024-10-18 08:41:47 · 837 阅读 · 0 评论 -
ElasticSearch如何写入一篇文档
这篇文章我们来聊聊ES底层是如何完成文档的索引,需要强调的是这里索引的概念是一个动词,即通过指定规则将用户数据按照ES规定的数据结构存储到物理磁盘中,通过对本文的阅读,你将会对ES底层的工作机制有着更深刻的理解和掌握。需要注意的是合并大的segment需要消耗大量IO和CPU资源,如果任其肆意合并也会影响检索性能,所以ES默认情况下会对合并流程所消耗的资源进行限制,以最大化保证检索性能。会默默在后台进行合并操作来解决这个问题,将所有的小段合成大段,然后再将大段合并成更大段以最大化的减少。原创 2024-10-16 08:43:46 · 1693 阅读 · 0 评论 -
一文快速入门消息队列
我们举个实际的业务场景来说明这个功能的作用,例如某个折扣消息只有会员的用户可以收到,某些更加优惠的消息只有会员等级超过3级的用户才能收到,如果在。为1~10的消息,此时又接入了一个消费者B,它同样需要从头开始消费,按照现有情况就必须从10开始,这就不符合我们的要求了,对此。上述的各种方案保证的消费的性能,但还是存在一些小瑕疵,按照现有的方案,我们都知道消费者消费完某个消息后就会实时更新消费进度。从设置之初就避免引入额外组件保证高可用的设计思路,它通过角色规划了各个节点的职责,在集群的情况下,原创 2024-10-21 08:45:55 · 488 阅读 · 0 评论 -
深度探索:Spring借助Easy - Es开启ElasticSearch操作实战篇章
默认情况下会扫描我们的文档实体完成索引创建,所以我们就可以直接声明文档的实体类型即直接使用,以本文为例,笔者创建的测试文档包含id、标题、内容几个字段,因为本案例多用内容的检索且文本内容多是中文,所以在进行字段设计的时候针对内容字段尝试将其设置为text类型,并将索引文档时用的分词器设置为。需要补充的是,在编写这篇文章之前,笔者对Easy-Es文档进行相对详细的阅读,个人认为Easy-Es1.0版本在实际项目中的集成和使用相对稳定一些,所以本文将以。原创 2024-10-17 08:42:37 · 1245 阅读 · 0 评论 -
Nacos源码研读第一步:环境搭建避坑指南与调试技巧
其实使用es并不难,难在了解es那些体系结构和工作机制,这对我们后续的es使用、线上故障排查、性能调优都有着质的帮助,所以本文将从顶层视角开始带读者了解es的体系结构,希望对你有帮助。中所提到的索引强调逻辑空间的概念,也就是从逻辑上来说用户所提交的文档(也就是提交的数据)是按照索引来划分的,但是从物理层面来说,这些索引所存储的数据本质上是落在不同的物理。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。原创 2024-10-12 08:42:54 · 808 阅读 · 0 评论 -
ES 基础使用指南:开启高效搜索之旅
按照默认的英文切词可以做到这一点,针对中文的场景,因为es没有针对中文做出相应的分词器,所以在进行分词的时候会将所有中文逐个切割进行匹配,这就导致的搜索的效果不尽人意,于是就有了ik中文分词器。需要注意的是英文切词还有一个特点,即提取有效词汇,假如我们传的是apple,分词器考虑到可能存在复数或者多种变式的单词后,提取的词可能就算。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。原创 2024-10-11 08:59:11 · 896 阅读 · 0 评论 -
从Lucene到Elasticsearch:底层引擎与分布式搜索的进化之路
所以,我们可以针对角色的维度进行拓展,例如:若我们希望拓展数据检索的能力,就可以将协作节点进行拓展,由此保证通过尽可能少的资源完成拓展保证服务可靠性。我们的文本远远不止这些词项,随着时间的推移需要维护的词项越来越多,基于当前的场景,我们的查询词项时需要进行扫描遍历,平均下来时间复杂度为。,它通过一个树形结构,按照词项前缀构成一颗有序树,将相关前缀挂到同一个树节点上,通过少量的内存存储这颗目录树,从而完成快速检索到磁盘中的。有时候我们还希望检索的数据可以看到我们的规则进行排序,例如我们希望检索到的。原创 2024-10-10 08:30:51 · 1091 阅读 · 0 评论 -
能不能给我讲讲redis中的列表
源码的角度直接分析列表操作指令,因为大部分指令操作细节区别不是很大,同时为了更专注于列表逻辑的分析,所以本文笔者将以双向链表这个数据结构为核心对。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。的源码分析,以链表为例讲解我们的操作,实际上其底层就是拿到链表的首元素并获取这个元素的值赋值给。原创 2024-10-08 08:43:09 · 260 阅读 · 0 评论 -
聊聊java零拷贝的几种实现
内核函数),从而实现本地数据传输只需将数据从磁盘加载到页缓存,后直接写入到目标文件的页缓存地址,由此减少了切态和用户态到内核态的拷贝开销。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。在之前的文章中,笔者对零拷贝技术进行了比较详细的介绍,而本文将基于之前文章的理论,从。原创 2024-09-30 08:55:34 · 1133 阅读 · 0 评论 -
能不能给我讲讲零拷贝
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。解决,该技术是将内核缓冲区中对应文件数据映射到用户缓冲区空间,使得用户缓冲区操作改动直接映射到内核缓冲区,由此避免了。技术的情况下,上一步将磁盘数据写入到内核缓冲区再通过CPU将磁盘数据拷贝到socket缓冲区步骤可直接有华为,通过。自此我们从一个java开发的角度简单了解了java中零拷贝的方式的运用,希望对你有帮助。有了初步的认识我们就可以更加深入的去分析传统。原创 2024-09-29 08:48:42 · 113 阅读 · 0 评论 -
聊聊我是如何阅读jdk源码
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。的底层实现,需要查看底层源码,于是我们就会看到下面这种情况,可以看到所有的变量都显示为。自此本文就将jdk源码配置和调试的步骤都演示完成,希望对你有帮助。,是个不断在硬核技术上作死的技术人,是。随后就是环境变量的配置了,这一点与常规的。原创 2024-09-27 08:55:34 · 63 阅读 · 0 评论 -
基于Netty源码学习那些并发技巧
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。采用无锁串行化的设计思路,通过整体并发,局部串行的方式替代多线程消费单个阻塞队列的方案,这种方案结合了。这种多消费者单生产者队列让并发的线程提交移步任务交给少量的nio线程处理,在整体并行的同时,通过优化。即可和笔者和笔者的朋友们进行深入交流。原创 2024-09-26 08:34:20 · 66 阅读 · 0 评论 -
从redis源码了解双向链表的设计与实现
通过上文我们了解了链表的基本数据结构,接下来我们就来聊聊链表的第一个操作,也就是头插法,这个操作就是将最新的节点插入的链表的首部,我们以初次插入为例,此时链表全空,双向链表初始化节点之后,就会让链表的头尾指针指向这个。自此我们将redis底层的双向链表的设计与实现的源码进行的深入分析,从中了解到redis双向链表数据结构设计和节点操作的实现细节,希望对你有所帮助。双向链表需要一个头指针和尾指针管理首尾节点,从而实现后续灵活的头插法和尾插法的操作,所以在设计双向链表的时候,我们就需要一个。原创 2024-09-25 08:42:07 · 409 阅读 · 0 评论 -
聊聊Netty客户端断线重连的设计与实现
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。的执行我们也可以通过源码的方式让读者了解,我们以客户端连接为例,一旦客户端断开连接,客户端的。自此我们基于Netty生命周期的源码剖析给出客户端断线重连的设计和落地思路,希望对你有帮助。,而本文将基于其中的一个拓展点实现连接可靠性,希望对你有帮助。原创 2024-09-20 08:37:02 · 81 阅读 · 0 评论 -
从Netty的ByteBuf中学习高并发场景下的内存优化艺术
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。我们在上述所讲的零复制更多强调的是应用层面上的零复制,也就是通过减少应用层面上数据的拷贝提升程序的执行效率。的时间,由此间接的提升了程序的性能,本文也将直接从源码的角度分析一下。内存拷贝也是存在一定的时间开销,例如我们现在有一个字符串的数据需要将。原创 2024-09-19 20:30:00 · 538 阅读 · 0 评论 -
基于DynamicDataSource整合分库分表框架Shardingsphere
会出现各种奇奇怪怪的报错,对此笔者结合报错原因查阅网上资料和底层源码运行机制找到了相对简单的适配步骤,遂以此文分享一下整个过程,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。数据源完成了整合,实现多数据源场景下使用分库分表的操作,本文到此结束,希望这套方案对你有帮助。原创 2024-09-19 08:52:42 · 878 阅读 · 1 评论 -
Netty连接可靠性Idle监测连环问
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。于是我们就有了方案2,也就是空闲监测,对于这成千上万的连接,我们可以定时进行空闲监测只有出现空闲的连接,我们才发送。任务,它会定时执行,然后查看当前时间减去上次读取到消息的时间是否大于定时的间隔,如果大于则说明当前连接处理。原创 2024-09-17 11:27:13 · 239 阅读 · 1 评论 -
来聊聊一个轻量级的有限状态机Cola-StateMachine
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。完成上述配置后,我们就可以在业务代码上使用这套状态机了,我们在开发买家支付方法时,只需将状态机注入,然后调用状态机的。重点来了,接下来就是订单状态扭转和事件的绑定,这里笔者简单说明一下,完成一个简单的案例快速入门了状态机的使用,希望对你有帮助。原创 2024-09-10 00:07:49 · 302 阅读 · 0 评论 -
空间预分配思想提升HashMap插入效率
即可看到笔者上文所说的,先进行无符号右移在进行按位或运算,得到一个低位为全1的二进制数,然后再加上1,得到一个2的次方的上限阈值,由此完成。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。在初始化时会基于我们提供的容量n得到一个2的次方的上限阈值,举个例子,假如我们初始化。原创 2024-09-06 08:47:59 · 108 阅读 · 0 评论 -
使用jmeter压测数据库
保证这个循环限定在半小时以内完成,这种方式也算是我们比较常见的压测方式,当然如果你明确压测的循环次数,可以直接去掉永久的勾选框,手动设置循环次数。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。数据库进行压测,所以需要MySQL的jar包,所以在正式配置压测参数之前,我们需要手动添加一下。原创 2024-09-04 08:44:32 · 152 阅读 · 0 评论 -
Nacos服务注册原理全解析
这个是InnoDB存储引擎独有的日志,用于MySQL工作过程中宕机时进行数据恢复的文件,从而保证数据的持久性以及完整性。我们都知道MySQL是需要保证原子性的,这就需要在数据持久化操作之前会这些数据进行记录的,undo log做的就是这些事,当SQL操作发生异常等情况时,我们就可以通过undo log将事务回滚确保事务的原子性。而mvccMySQL事务与并发控制详解。原创 2024-09-03 21:22:57 · 728 阅读 · 0 评论 -
详解undoLog在MySQL多版本并发控制MVCC中的运用
某个逻辑报错数据库连接中断某台服务器突然宕机这时候我们数据库执行的操作可能才到一半,所以为了避免这种一半一半的情况,我们就需要事务来保证数据一致性。所以事务就是当作一个原子的逻辑组操作,要么全都成功执行,要么全部都失败。事务有分分布式事务和数据库事务,如果没有特指,我们平时所说的事务都是数据库事务,也就是本文探讨的话题。原创 2024-09-03 21:15:26 · 1407 阅读 · 0 评论 -
以从节点的角度看看Redis主从复制的实现
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。近期工作遇到比较奇葩的规划,个人思绪略有惆怅,希望通过整理一些技术小文缓解心中的压抑,我们都知道。的状态是否是待连接,如果是则通过主库的ip及端口号信息发起连接,并在连接期间将状态设置为。发起非阻塞连接,并创建一个连接成功后的回调处理事件。原创 2024-07-12 09:07:37 · 635 阅读 · 0 评论 -
聊聊Netty异常传播链与最佳实践
Netty通过责任链的思想解耦了各个业务的处理逻辑,是的用户可以非常方便的根据不同的生命周期进行相应的业务处理。而本文将针对Netty中的异常和异常传播过程进行分析,并给出最佳的处理技巧,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。即可和笔者和笔者的朋友们进行深入交流。原创 2024-08-30 08:53:36 · 110 阅读 · 0 评论 -
实用的IDEA配置和操作技巧总结
有时候我们在开发中会遇到一个对象需要set多个值,我们就可以安装这个插件:安装完成并重启IDEA后,对着需要进行set的对象键入alt+enter即可根据需要完成set,以笔者为例,我们要设置默认值,所以我们就选择选项:如下图所示,打出勾选的字母就会弹出白色框中的代码段,所以如果我们有希望可以快捷输出的代码也可以自己制作一个代码模板。原创 2024-03-20 08:30:00 · 3848 阅读 · 0 评论 -
硬核详解redis客户端指令与服务端传输协议RESP
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。实现二进制安全的核心,它记录的是每一个字符串的长度和字符串内容,以我们键入的。即可看到笔者所说的核心流程,即解析数组的长度,然后基于数组的长度去解析每一个。后面的值,数值为1,说明这个数组长度为1,记录该长度,循环读取1次,按照。原创 2024-08-29 08:47:08 · 129 阅读 · 0 评论 -
安利一下IDEA中的Arthas插件
本文笔者直接通过IDEA插件快速生成Arthas指令快速完成日常JVM运维和故障定位工作,可以看到有了插件的配合我们只需大概记住指令的作用即可,每当我们需要使用的时候,只需要结合插件生成一下指令进行相应简单调整即可快速得到想要的指令。此时我们就可以通过反编译的方式进行35行实际的代码,在没有arhtas idea插件之前,我们jad指令都需要手动进行输入,有了idea插件之后,只需找到对应的java文件右键找到。原创 2024-08-27 23:14:20 · 4433 阅读 · 0 评论 -
Netty-Reactor模型常见知识点小结
笔者分别带入索引0、5、8,进行与运算时,真正参与的二进制永远是和永远是7以内的进制,得出的结果分别是0、5、0,永远不会越界,并且运算性能还能得到保证。这样可以在进行IO操作时立即返回,不会阻塞线程,提高系统的并发性和响应性能。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。进行具体的事件处理。原创 2024-08-27 22:17:30 · 991 阅读 · 0 评论 -
Nginx性能优化
nginx作为常用的web代理服务器,某些场景下对于性能要求还是蛮高的,所以本片文章会基于操作系统调度以及网络通信两个角度来讨论一下Nginx性能的优化思路。我们的大学教程大部分讲述七层模型,实际上现代网络协议使用的都是四层模型,如下图,应用层报文经过四层的首部封装到对端。对端链路层拆开首部查看mac地址是自己在网上,拆开ip首部查看目的地址是不是自己,然后到达传输层应用层完成报文接收。文章是基于原有个人知识基础上,对旧知识进行巩固,以及新知识实践学习。原创 2022-03-22 14:33:20 · 3194 阅读 · 1 评论 -
系统重装简记
因为固态损毁而更换固态,所以需要进行系统重装,由于系统重装都是固定的繁琐的步骤,所以就以这篇文章来记录一下系统重装的一些日常步骤,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。系统安装完成之后,可能某些同学安装的是专业版,需要进行特殊处理一下,这里就多做赘述了。原创 2024-08-15 08:56:32 · 2143 阅读 · 0 评论 -
来聊聊Netty几个开箱即用的处理器框架
我们需要使用Netty。原创 2024-08-01 08:32:24 · 1375 阅读 · 0 评论 -
详解Netty中的责任链Pipeline如何管理ChannelHandler
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。的关系,以及传播顺序,建议读者按照笔者的说明进行handler编排,并解耦各个处理器的逻辑,由此提升程序的稳定性和可维护性。抽象,然后解析该事件的操作位是读事件,于是直接调用。的write方法的实现,可以看到其内部本质就是调用。原创 2024-07-30 08:36:26 · 2303 阅读 · 3 评论 -
用Netty快速落地一个客户端程序
于是我们给出下面这样一段基于引导类配置客户端程序的代码段,可以看到因为客户端无需处理接入连接,所以就没有配置主从reactor,对应的引导类我们就采用。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。或者超时在进行发送,所以在没收到ACK且没超时期间,客户端又攒了18bytes的数据,服务端发送。原创 2024-07-29 09:01:29 · 1185 阅读 · 0 评论 -
基于Netty服务端快速了解核心组件
channel是Netty对于底层class socket中的bind、connect、read、write等原语的封装,简化了我们网络编程的复杂度,同时Netty也提供的各种现成的channel,我们可以根据个人需要自行使用。为保证网络服务器执行的效率,Netty大部分网络IO操作都采用异步的,以笔者建立连接设置的监听器为例,当前连接成功后,就会返回给监听器一个。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。原创 2024-07-26 09:19:08 · 826 阅读 · 0 评论 -
一文快速了解高性能网络通信框架Netty
最后我们给出FirstServerHandler 的代码,可以看到我们直接继承ChannelInboundHandlerAdapter 处理客户端发送的数据,每当服务端收到客户端数据时就会回调channelRead,我们的逻辑也很简单,收到数据之后直接回复。由此可知,一旦遇到高并发IO读写,由于一个客户端绑定一个线程的模式,所以每一个端口号的收发都需要一个线程进程处理,如果有大量连接接入势必导致频繁的线程上下文切换进而导致各种资源的消耗,由此导致著名的。原创 2024-07-25 09:05:57 · 890 阅读 · 0 评论 -
netty源码编译跑通简记
源码,发现有了一些不一样的见解,于是便打算重构一下过去的文章分享,而本文将会简单梳理一下笔者对于netty源码编译到运行的全过程,希望对你有帮助。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。获取项目地址,因为笔者习惯在源码上做个人注释,所以也需要进行个人的代码版本管理,所以直接选择下载的方式获取源码,而版本选择的则是。编译不通过,而解决方式也很简单,打开根目录下的pom文件,找到。即可和笔者和笔者的朋友们进行深入交流。原创 2024-07-24 08:32:45 · 746 阅读 · 0 评论 -
来聊聊redis集群数据迁移
redis集群提供16384个slot,我们可以按需分配给节点上,后续进行键值对存储时,我们就可以按照算法将键值对存到对应slot上的redis服务器上:集群节点本质就是通过slots这个数组记录当前节点的所管理的情况,这里我们可以看到slots是一个char数组,长度为char占1个字节,每个字节8位。每个char可以记录8个slot的情况,如果是自己的slot则对应char的某一个位置记录为1:我们以node-1。原创 2024-07-23 08:54:32 · 1226 阅读 · 0 评论 -
来聊聊去中心化Redis集群节点如何完成通信
这个存活节点后续和其他节点通信时,就会将当前新添加的节点4发送出去,由此其他节点收到这个消息并存储下来,经过各个节点的不断反复通信,这个集群中的各个节点就会拥有集群中所有节点的信息。协议,默认情况下我们的当前有3个节点的集群,各个节点彼此按照通信要求发送自己的信息和与自己保持交流的节点,由此将有限的资源共享出去构成一个集群。协议,该协议是分布式集群的一种通信协议,我们都知道管理集群的方式有中心化和去中心化两种方式,中心化的方式是通过第一个第三方的管理中心,例如。原创 2024-07-19 08:40:17 · 734 阅读 · 0 评论 -
来聊聊redis的发布订阅设计与实现
自此我们们将redis发布订阅的设计与实现,本质上就是通过一个个链表管理订阅者,通过pub指令定位到channel后将消息遍历发送到对应客户端socket上,这里笔者也简单的补充一句,从源码中我们可以看到redis的发布订阅模型没有持久化机制,所以对于可靠性要求高的场景笔者还是不太建议使用pub/sub。发布订阅源码的设计与实现,通过本文的阅读,你将会对发布订阅模型的设计思想以及对哨兵间选举通信的流程有着更底层的视角。的客户端追加到链表中。中的哨兵就很好的利用这种模式进行沟通和选举等各个工作,当我们的。原创 2024-07-18 08:30:52 · 800 阅读 · 0 评论