自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门

断路器有三种状态,状态之间的转换有两种策略

2024-04-27 01:10:32 144

原创 【SpringCloud】OpenFeign高级特性

OpenFeign中 http client 如果不做特殊配置,OpenFeign默认使用JDK自带的 HttpURLConnection 发送HTTP请求,由于默认HttpURLConnection没有连接池、性能和效率比较低,所以我们采用阿帕奇的Http客户端替换掉它。如果A服务想让B服务的超时时间为2s,C服务想让B服务的超时时间为1s,那么全局配置就合适了,应该使用指定配置。OpenFeign 的重试机制默认是关闭的,需要手动开启。注意:如果全局配置和指定配置同时存在,则以指定配置为主。

2024-04-25 22:49:31 629 1

原创 【SpringCloud】OpenFeign服务接口调用快速入门

点击跳转Feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用 Feign 创建一个接口并对其进行注释。它具有可插入的注释支持,包括Feign注释和 JAX-RS 注释。Feign 还支持可插拔编码器和解码器。Spring Cloud 添加了对 Spring MVC 注释的支持,以及对使用 Spring Web 中默认使用HttpMessageConverter 的支持。

2024-04-25 00:58:08 912

原创 【SpringCloud】LoadBalance负载均衡服务调用快速入门

点击跳转是由 SpringCloud 官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在中用它来替换了以前的Ribbon组件。相比较于Ribbon,Spring Cloud LoadBalancer 不仅能够支持 RestTemplate,还支持 WebClient( WeClient 是 Spring Web Flux 中提供的功能,可以实现响应式异步请求)

2024-04-25 00:00:02 339 1

原创 【SpringCloud】Consul-服务注册中心及配置中心快速入门

首先要创建一个 Config 文件夹,然后创建各个子文件夹,最后的data文件就是配置文件。注意:如果输入结尾是’/',则当前为文件夹,下方的文本框会消失。注解即可开启动态刷新配置的功能,默认每隔55s刷新一次配置。启动SpringBoot服务,检查服务是否注册成功。为例,默认环境的配置如下,其他几个环境操作都相同。在测试之前,别忘了将。

2024-04-23 22:09:25 580

原创 【讯飞星火大模型AI】SpringBoot项目快速接入讯飞星火API

SpringBoot项目快速接入讯飞星火Spark API调用AI,零基础快速入门。

2024-03-10 23:56:34 966

原创 【项目部署上线】宝塔部署前端&Docker部署后端

部署前后端分离项目

2024-02-25 22:22:36 1771 1

原创 【Git】Git基础命令操作速记

当我们有两个分支branch01和master时,branch01和master的版本不同,如果合并则会发生冲突,此时就需要我们想办法合并冲突。此时状态就是工作区和暂存区的文件都删除了,但是本地仓库还有对应的该文件。在抓取操作执行后,只是将远程库的内容下载到本地,但是工作区中的文件并没有更新。4)查看日志,发现并没有将原来的添加操作删除,而是直接新增了一个“删除Test2.txt”信息。5)找回本地仓库删除文件实际上就是将历史版本切换到存在这个文件的版本。将远程库中的内容fetch到本地仓库的主分支当中。

2023-11-08 00:40:52 339

原创 【JVM】垃圾回收机制

ParNew + CMS (关注暂停时间)PS + PO(关注吞吐量)G1(JDK8之前不建议,较大堆并且关注暂停时间)G1(默认)

2023-10-30 22:06:25 743

原创 【JVM】类加载器

类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。一个Tomcat程序中可以运行多个Web应用,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。Tomcat使用了自定义类加载器来实现应用之间类的隔离。

2023-10-27 00:08:07 762

原创 【JVM】类的生命周期

加载(Loading)连接(Linking)验证准备解析初始化(Initialization)使用(Using)卸载(Unloading)加载:根据类的全限定名把字节码文件的内容加载并转换成合适的数据放入内存种种那个,存放在方法区和堆上。连接验证:魔数,版本号等验证,一般不需要程序员关注。准备:为静态变量分配内存并设置初始值。解析:将常量池中的符号引用(编号)替换为直接引用(内存地址)初始化:执行静态代码块和静态变量的赋值。使用卸载静态变量使用final。

2023-10-25 00:36:42 713

原创 【Redis】Redis内存过期策略和内存淘汰策略

Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。不过在其database结构体中,有两个Dict:一个用来记录key-value;:顾名思义并不是在 TTL 到期后就立刻删除,而是在访问一个 key 的时候,检查该 key 的存活时间,如果已经给过期才执行删除。删除以释放更多内存的流程。Redis会在处理客户端命令的方法。:就是当Redis内存使用达到设置的上限时,主动挑选。:顾名思义是通过一个定时任务,周期性的。

2023-08-11 20:44:12 472

原创 【SpirngCloud】分布式事务解决方案

XA 模式的优点是什么?事务的强一致性,满足ACID原则。常用数据库都支持,实现简单,并且没有代码侵入。XA 模式的缺点是什么?因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差。依赖关系型数据库实现事务简述AT模式和XA模式的最大区别是什么?XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。XA模式依赖数据库机制实现回滚,AT模式利用数据快照实现数据回滚。XA模式强一致,AT模式最终一致AT模式的优点一阶段完成直接提交事务,释放数据库资源,性能比较好。

2023-07-24 19:03:32 1147

原创 【OAuth2】OAuth2概述及使用GitHub登录第三方网站

OAuth 是一个开放的非常重要的认证标准/协议,允许用户授权第三方应用访问其存储在其他网站上资源,而无需将用户名密码提供给第三方网站的开放标准/协议。OAuth2 是 OAuth 的最新版本,同时也是被广泛应用的一个版本。我们在网站上常见的QQ登录,微信扫码登录,GitHub 授权登录就是基于 OAuth2.0 实现的。点击跳转。

2023-07-19 01:11:02 1406

原创 【MongoDB】SpringBoot整合MongoDB

如果没有包含”ls“这条文档,那么就会插入”ls“这条文档,但是如果id重复,那么就会抛出异常。创建一个 ”products“ 集合,如果不存在则创建,存在则不创建。首先创建一个 User 类,给它一些基本属性。方法,可以一次性插入整个数据,效率更高。

2023-07-17 15:19:39 1667

原创 【Docker】docker-compose基本使用

Docker Compose是一个用于定义和运行多个Docker容器的工具,负责实现对 docker 容器集群的快速编排,它使用 YAML 文件来配置应用程序的服务、网络和卷等方面。Compose服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。项目(project):由一组关联的应用容器组成的一个完整业务单元,在文件中定义。

2023-07-16 14:37:53 1494

原创 【Docker】Dockerfile基础命令和操作

ADD和COPY都能够将宿主机的文件添加到容器当中,但是ADD还有一个更强大的功能,ADD后面还能够接url参数,就是说ADD可以联网下载你url指定的文件,而COPY仅仅只能添加上下文目录中的文件。用来从 context(上下文) 上下文复制新文件,目录或远程文件 url ,并将它们添加到位于指定路径的映像文件系统中。RUN 命令将在当前映像之上的新层中执行任意命令并提交结果,生成的提交映像将用于 Dockerfile 中的下一步。用来为启动的容器指定执行的命令,在 Dockerfile 中。

2023-07-15 13:25:18 807

原创 【Docker】Docker高级网络(NetWork)

当 Docker 启动时,会自动在主机上创建一个docker0虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。同时,Docker 随机分配一个本地未占用的私有网段(在RFC1918中定义)中的一个地址给docker0接口。比如典型的,掩码为。此后启动的容器内的网口也会自动分配一个同一网段()的地址。当创建一个 Docker 容器的时候,同时会创建了一对veth pair接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)

2023-07-14 17:28:17 976 2

原创 【Kafka】Kafka消费者

例如:groupid的hashcode值=1,1%50=1,那么_consumer_offsets主题的1号分区,在哪个broker上,就选择这个节点的coordinator作为这个消费者组的老大。**注意:在消费者API代码中必须配置消费者组id。**命令行启动消费者不填写消费者组id会被自动填写随机的消费者组id。形成一个消费者组的条件,是所有消费者的groupid相同。运行三个消费者程序,分别在三个控制台中发现每个消费者消费的都是不同分区的数据。:辅助实现消费者组的初始化和分区的分配。

2023-07-10 00:20:21 869

原创 【Kafka】Kafka的Broker概述

针对broker0节点,分区2的AR优先副本是0节点,但是0节点却不是Leader节点,所以不平衡数加1,AR副本总数是4,所以broker0节点不平衡率为1/4>10%,需要重平衡。在生产环境中,每台服务器的配置和性能不一致,但是Kafka只会根据自己的代码规则创建对应的分区副本,就会导致个别服务器存储压力较大。Broker1的不平衡数为0,不需要再平衡。但是我们发现,新节点服役之后,之前创建的topic还是只存在之前的节点中,于是我们创建一个要均衡的主题。,来保证每台机器的读写吞吐量都是均匀的。

2023-07-09 00:15:14 704

原创 Kafka生产者概述

在消息发送过程中,涉及到了两个线程—— main 线程和 Sender 线程。回调函数会在 producer 收到 ack 时调用,为异步调用,该方法有两个参数,分别是元数据信息(RecordMetadata)和异常信息(Exception),如果 Exception 为 null,说明消息发送成功,如果 Exception 不为 null,说明消息发送失败。**需求:**创建 Kafka 生产者,采用异步的方式发送到 Kafka Broker。在node1节点中开启kafka消费者。

2023-07-06 23:21:44 805 1

原创 【Kafka】Kafka基础概念笔记

【代码】【Kafka】Kafka基础操作笔记。

2023-07-05 23:54:48 1028

原创 【Redis】Redis的数据结构

突然要插入一个长度为254字节的entry,采用头插法插入,那么原来第一个entry的previous_entry_length就变成了5,那么整体的entry长度就由原来的250变成了254字节,那么又导致原来的第二个entry的previous_entry_length变成了5…注意:ZipList中所有存储长度的数值均采用小端字节序,即低位字节在前,高位字节在后。Dict中的HashTable就是数组结合单向链表的实现,当集合中元素较多时,必然导致哈希冲突增多,链表过长,那么查询效率会大大降低。

2023-06-26 00:34:37 544

原创 【Redis】Redis最佳实践/经验总结

如果您需要高可用性,并且要求Redis集群中的每个节点都持有完整数据集并能够处理客户端请求,则可以选择Redis集群部署。如MSET或Pipeline这样的批处理需要在一次请求中携带多条命令,而此时如果Redis是一个集群,那批处理命令的多个key必须落在一个插槽中,否则就会导致执行失败。集群中节点越多,集群状态信息数据量也越大,10个节点的相关信息可能达到1kb,此时每次集群互通需要的带宽会非常高。总之,在使用Redis集群时,需要了解每个命令的集群兼容性问题,并采取相应的措施来确保集群的稳定性和性能。

2023-06-23 01:05:39 990

原创 【RocketMQ】SpringBoot集成RocketMQ

3000ms为连接mq的超时时间,延时等级为2.

2023-06-02 17:25:13 832

原创 【RocketMQ】重试机制及死信消息处理

顺序消费和并发消费的重试机制并不相同,顺序消费消费失败后会先在客户端本地重试直到最大重试次数,这样可以避免消费失败的消息被跳过,消费下一条消息而打乱顺序消费的顺序,而并发消费消费失败后会将消费失败的消息重新投递回服务端,再等待服务端重新投递回来,在这期间会正常消费队列后面的消息。若Consumer消费某条消息失败,则RocketMQ会在重试间隔时间后,将消息重新投递给Consumer消费,若达到最大重试次数后消息还没有成功被消费,则消息将被投递至死信队列。针对方案一的缺点,方案二能够比较好的解决。

2023-06-02 15:19:35 3992

原创 【RocketMQ】RocketMQ标签、过滤及消息重复消费

Broker 端会为每个消息创建索引(哈希索引),应用可以通过 topic、key 来查询这条消息内容,以及消息被谁消费。但通常情况下,不同的 Topic 之间的消息没有必然的联系,而 Tag 则用来区分同一个 Topic 下相互关联的消息,例如全集和子集的关系、流程先后的关系。注:msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。如果失败,则直接返回。消息为什么会重复消费?

2023-06-01 17:33:58 1832

原创 【RocketMQ】RocketMQ入门

消息发送方在发送了一条消息后,不需要等待服务端响应即可发送第二条消息,发送方通过回调接口接收服务端响应,并处理响应结果。Push模式也是基于pull模式的,只能客户端内部封装了api,一般场景下,上游消息生产量小或者均速的时候,选择push模式。同步发送是最常用的方式,是指消息发送方发出一条消息后,会在收到服务端同步响应之后才发下一条消息的通讯方式,可靠的同步传输被广泛应用于各种场景,如重要的通知消息、短消息通知等。异步发送是指发送方发出一条消息后,不等服务端返回响应,接着发送下一条消息的通讯方式。

2023-05-25 16:07:20 1675

原创 【JUC】Synchronized与锁升级

用锁能够实现数据的安全性,但是会带来性能下降。无锁能够基于线程并行提升程序性能,但是会带来安全性下降。如何达到两者的平衡呢?用的锁是存在java对象头里的Mark Word中。锁升级功能主要依赖Mark Word中锁标志位和释放偏向锁位Mark Word存储的是偏向的线程ID。Mark Word存储的是指向线程栈中 Lock Record 的指针。Mark Word存储的是指向堆中的 monitor 对象的指针。

2023-05-23 00:41:31 423

原创 【JUC】Java对象内存布局和对象头

默认配置:启动了压缩指针,对象头是12个字节,实例数据2个字节,那么这个对象大小就是 12 + 2 + 2(对齐填充) = 16字节。手动配置:关闭了压缩指针,对象头是16个字节,实例数据2个字节,那么这个对象大小就是 16 + 2 + 6(对齐填充) = 24字节。存放类的属性(Field)数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐。对象,对象头16个字节,实例数据5个字节,所以对象头+实例数据=21个字节。都占8个字节,所以对象头的大小为16个字节。

2023-05-22 00:25:16 1057

原创 【JUC】ThreadLocal

ThreadLocal 提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(例如,用户ID或事务ID)与线程关联起来。常用API:ThreadLocal 初始化:return 0;} };需求:5个房屋中介,每个人随机卖出几套房子,统计各自的销售额class House //资源类 {} } /**

2023-04-30 23:42:55 1190

原创 【Redis】缓存同步

Canal提供了各种语言的客户端,当Canal监听到binlog变化时,会通知Canal的客户端。Canal ,译意为水道/管道/沟渠,canal是阿里巴巴旗下的一款开源项目,基于Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Canal推送给canal-client的是被修改的这一行数据(row),而我们引入的canal-client则会帮我们把行数据封装到Item实体类中。Canal提供了各种语言的客户端,当Canal监听到binlog变化时,会通知Canal的客户端。

2023-04-23 23:18:44 836

原创 【JUC】原子操作类

原子更新带有标记位的引用类型对象,它的定义就算将状态戳简化为。携带版本号的引用类型原子类,可以解决。可以记录修改过几次变量。

2023-04-22 21:26:24 639 2

原创 【JUC】CAS

在Java并发编程中,CAS是一种非阻塞的算法,即(比较并交换)。CAS通过比较内存中某个位置的值和预期值,如果相同,则将该位置的值更新为新值;否则不进行任何操作。(和乐观锁的思想类似)在多线程并发执行时,如果同时有多个线程尝试更新同一个位置的值,只有一个线程会成功,其他线程会失败,但它们并不会被阻塞,而是可以立即重新尝试(自旋)。} }运行结果如下:CAS是JDK提供的非阻塞原子性操作,它通过硬件保证了比较-更新的原子性。

2023-04-22 17:04:49 375

原创 【Mysql】分库分表

IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。CPU瓶颈:排序、分组、连接查询、聚合统计等sql会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。为解决以上问题,我们需要对数据库进行分库分表处理。分库分表的中心思想就是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。

2023-04-21 23:48:05 495

原创 【Mysql】主从复制

主从复制是指主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后再从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。主库出现问题,可以快速切换到从库提供服务。实现读写分离,降低主库的访问压力。可以在从库中执行备份,以避免备份期间主库不能写入的问题。

2023-04-19 23:59:42 290

原创 【Mysql】日志

开启了查询日志之后,在MySQL的数据存放目录,也就是 /var/lib/mysql/ 目录下就会出现 mysql_query.log 文件。慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于 min_examined_row_limit 的所有的SQL语句的日志,该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log。也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。

2023-04-18 17:43:08 631

原创 【Redis】多级缓存(nginx缓存、redis缓存及tomcat缓存)

注:lua/item.lua的lua目录和nginx同级,完整路径为/usr/local/openresty/lua,在这个文件下面就可以编写缓存脚本。是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库,目前spring内部的缓存使用的就算Caffeine。注:用作缓存的nginx是业务nginx,需要部署为集群,再使用专门的nginx用来做反向代理。不会自动立即将其清理和驱逐,而是在一次读或写操作后,或者在空闲时间完成对失效数据的驱逐。在默认的情况下,当一个缓存元素过期的时候,

2023-04-16 23:19:01 959

原创 【Redis】Lua快速入门使用

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/在centos系统中默认已经安装了lua,所以我们在系统中新建一个文件:")通过命令运行。

2023-04-14 23:35:26 655

原创 【JUC】volatile和JMM

(也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作),,Java内存模型的重排规则会要求Java编译器在生成JVM指令时插入特定的内存屏障指令,通过这些内存屏障指令,的所有读操作都能获得内存屏障之前的所有写操作的最新结果(实现了可见性)。因此重排序时,不允许把内存屏障之后的指令重排序到内存屏障之前。的所有写操作都要回写到主内存,禁重排,通过内存屏障禁重排。

2023-04-14 22:44:58 437

空空如也

空空如也

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

TA关注的人

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