自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud中怎么使用Resilience4j RateLimiter对接口进行限流

Resilience4j 是一个轻量级的容错库,支持函数式编程设计。它提供了多种容错机制,包括熔断器(Circuit Breaker)、限流器(Rate Limiter)、重试(Retry)、舱壁(Bulkhead)等。相比于 Hystrix,Resilience4j 更加轻量级,并且在上篇文章中提到随着Hystrix停止维护,Resilence4j成了spring cloud官方主推的容错库。上篇文章我们介绍了熔断器,今天我们继续介绍它提供的限流器组件RateLimiter。

2024-07-19 17:50:27 669

原创 Spring Cloud怎么集成resilience4j提供的熔断器

在集成resilience4j之前我们先回顾一下,什么是熔断器?"熔断器"本身是一种开关装置,当某个服务单元发生故障后,通过熔断器的故障监控(类似电路中保险丝熔断),停止调用故障的服务。向调用方返回一个兜底的、符合预期的、可处理的备选响应,而不是长时间的等待或者抛出调用方无法处理的异常。这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中的蔓延,甚至雪崩。

2024-07-08 14:22:11 721

原创 怎么使用Consul当配置中心和动态刷新配置

在现在分布式系统和微服务架构中,每个服务都有自己的配置,这些配置又分为公共的配置(每个服务都相同的部分)和私有的配置(这个服务特有的部分配置)。并且在不同的环境中配置又不尽相同,例如在开发环境和生成环境的数据库配置就会不一样,如果单独对每个服务进行配置和管理会显得及其麻烦,所以集中式管理的思想就诞生了!配置中心是一个集中管理和分发应用程序配置的系统。在现代分布式系统和微服务架构中,配置中心起着至关重要的作用,因为它能够提供一种统一的方式来管理不同服务的配置,并且支持动态更新配置而无需重启服务。

2024-06-21 11:00:23 867

原创 怎么保证缓存和数据库的一致性?

在进行项目开发中,我们为了提高接口的性能,通常会上缓存,不管是本地缓存还是分布式缓存。使用缓存确实能提高我们接口的响应速度,但是怎么保证缓存和数据库的一致性又是我们比较关注的一个点。因为缓存数据不一致,最直接的结果是会导致业务逻辑错误,这是我们不能接受的。

2024-06-11 14:48:01 819

原创 主键UUID和数据库自增ID怎么选择?

最近在建表选择主键的时候有些纠结,我们经常使用的主键有两种UUID和自增ID,不知道选哪一种好。之前一直没有总结过这两种主键的区别,于是今天去总结了一下这两种主键的区别、优缺点,以便为我们以后主键选择提供一些参考。

2024-05-31 15:58:54 366

原创 Spring Boot项目怎么集成Gitee登录

现在的越来越多的项目,需要集成第三方系统进行登录。今天我们以Spring Boot项目集成Gitee为例,演示一下怎么使用Oauth2协议,集成第三方系统登录。Ouath2是怎么实现在第三方应用认证的?_oauth2 怎么向第三方应用备案-CSDN博客。不了解oauth2的,可以看我之前的文章。二、项目中引入oauth2的包。

2024-05-13 17:59:18 386 2

原创 SQL Server中怎么排查死锁问题

我们有一张userToken表,核心字段有id、loginId和token,主要用来记录用户的登录token,用来控制系统中一个用户能不能多次登录。我们出现死锁问题的方法是登录方法,该方法在登录时会向userToken表中插入一条数据,插入成功之后回去第三方检查这个用户的状态等是否正常,因为用户数据是第三方维护的。如果检查结果是这个用户状态不可用,那么就会去删除这个用户的token数据,同时给前端返回相应的异常信息。

2024-05-13 17:36:43 2551 3

原创 怎么使用JMeter进行性能测试?

JMeter是Apache软件基金会下的一款开源的性能测试工具,完全由Java开发。它专注于对我们应用程序进行负载测试和性能测量,最初设计用于web应用程序,现在已经扩展到其他测试功能,比如:FTP、Database和LDAP等。Apache JMeter可以用来测试静态和动态资源,以及Web动态应用程序。它可以用来模拟对服务器,一组服务器,网络或对象施加重负载,以测试其强度或分析在不同负载类型下的整体性能。

2024-04-15 15:42:08 1430

原创 Spring Cloud有哪些常用的组件?

Spring Cloud是基于Spring Boot的一套完整的分布式系统开发工具,为开发者提供了在分布式系统中(尤其是微服务架构)通用的一些组件和特性。它整合了市面上很多主流的开源框架和技术,使得开发者能够快速搭建大型分布式系统。Spring Cloud的主要目的是解决分布式系统中常见的问题,如:服务注册与发现、请求路由与转发、负载均衡、配置管理、链路追踪、限流、降级和熔断等。直接上图,看一下这些组件起到的作用,以及所处的位置。

2024-03-29 14:50:40 396 1

原创 Mysql中的执行计划怎么分析?

通过对执行计划的各个字段进行了分析和说明,我们在进行sql优化的时候,尽可能使用最优的方式来提高性能。

2024-03-26 09:59:23 896

原创 微服务网关Spring Cloud Gateway有什么作用?

综上所述,spring cloud gateway就是一个流量的统一入口,所以它能做很多事情,如路由转发、负载均衡、统一鉴权和限流等保护服务的机制。但是,另外一方面作为所有流量的入口,网关会处理大量的请求,容易成为我们系统的瓶颈。所以,我们需要对资源进行合理的分配,做好网关应用的监控,如发现异常需及时进行处理。

2024-03-14 15:58:22 1443

原创 Mysql中高并发场景为什么不推荐使用外键?

其实,在很多大厂中是很少使用外键,甚至很多大厂中明文规定禁止使用外键。在分库分表的场景中,相关的数据可能分布在不同数据库中,这时外键就不能跨越不同的数据库来建立联系了。此外,分库分表环境中,数据的一致性很难维护,还涉及跨库事务等问题。锁竞争的问题是比较容易忽略的,当有多个事务同时插入或更新从表时,它们就需要去检查主表。这就使得每次插入、更新、删除时,数据库都需要维护这个索引,这就会导致额外的性能开销。外键会增加数据库的维护负担,因为每次插入、更新或删除时,数据库都需要检查约束的完整性。

2024-03-07 15:35:51 484

原创 Spring Boot项目怎么优化接口性能?

Spring Boot是一个非常流行的Java后端框架,它可以帮助我们快速高效的构建web应用程序。但是随着应用程序规模的增长,性能也开始变得严重起来。本文将介绍如何在spring boot项目中实现性能优化,以提高应用程序的性能和可靠性。

2024-02-29 11:15:13 436

原创 Spring Boot项目怎么通过Redisson实现滑动窗口限流?

为了防止这些接口被攻击者恶意频繁调用,消耗我们的系统资源,通常我们会对这些接口做限流保护,否则可能会导致我们的服务器的宕机。在redisson中已经为我们实现好了滑动窗口限流,通过redissonClient拿到限流器后,配置好时间窗口和限流速率就能直接使用了。实现原理和上面我们的伪代码是一样的,只是它将这一部分封装好了,我们拿到后开箱即用。从上图我们可以得知,有一个时间窗口随着时间轴在向右移动,我们可以记录这个时间窗口内的请求次数,当超过我们允许的阈值时,则进行限流不能继续进行请求。

2024-02-01 17:28:51 779

原创 JAVA中做技术选型应该考虑哪些因素?

在日常工作中,当我们遇到新的业务需求要用到某一项技术时,或者在做架构设计的时候需要用到某项技术。然而这项技术有多个不同的解决方案,这时候就需要我们进行技术选型了。每种解决方案都有自己的优缺点,我们需要选出其中一个最适合我们的方案。在技术选型时没有最好,只有最适合。

2024-01-18 10:56:54 598

原创 Ouath2是怎么实现在第三方应用认证的?

Oauth(Open Authorization)是一个关于授权的开放网络标准,它允许用户授权第三方应用访问他们存储在其它服务提供者上的身份信息,而不需要将用户名和密码提供给第三方应用。例如,我们在登录淘宝的时候,可以使用支付宝授权登录,我们不需要在淘宝上输入支付宝的账号密码。现在oauth的使用已经非常广泛了,目前常用的版本是2.0,所以我们经常说oauth2.0。

2024-01-12 15:29:34 811

原创 微服务系统中限流、降级和熔断有什么区别?

A服务调用B服务的某个方法,但是由于B服务的网络不稳定,导致我们整个调用链路变慢,那么这个时候我们就停止调用B服务,防止把整个系统拖垮。举个例子,我们后台集群的消费能力是每秒处理10000个请求,那么我们从网关处放行给后台服务集群放行过来的请求就不能超过10000,从而保证我们服务不会被超过它能力的流量压垮。后台集群的消费能力有限,我们应当在它的消费能力范围内,给它放行请求进来,这就是限流。限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃,

2024-01-05 14:38:20 462

原创 Java中双亲委派模型是怎样的?

双亲委派是Java中的一种类加载机制,在Java中,类加载器负责加载类并将其转换为可在JVM中运行的对象。当一个类加载器收到了类加载的请求,它首先会将这个请求委派给它的父类加载器去完成,而不是自己去加载这个类,每一个层次的类加载都是如此。因此,所有的类加载请求最终都会传递到最顶层的启动类加载器中,只有当父加载器无法完成这个加载请求时,子加载器才会尝试去加载。

2023-12-21 10:13:56 372

原创 JAVA中synchronized是怎么保证原子性、有序性和可见性的?

在并发编程中,通常会出现原子性、有序性和可见性的问题。而通过synchronized关键字就能保证原子性、可见性和有序性,那么synchronized是如何保证的呢?在探讨之前,我们先解释一下什么是原子性、有序性和可见性。一个指令或多个指令在执行过程中不允许被中断,对应到代码中就是一段代码的执行不能被拆分,不能被中断。注意,这里的原子性是指并发编程中的原子性,与数据库事务中的原子性不同,事务中的原子性是指要么都执行,要么都不执行。

2023-12-14 16:51:14 635 4

原创 Java中的IO模型有哪些?

在Java中,IO(Input/Output)模型是一个非常重要的概念。在计算机中IO模型是管理计算机对外部数据读取和写入操作,在我们Java应用程序中IO模型是指应用程序与IO设备也就是计算机之间的交互方式。在Java中主要有3种IO模型,BIO(Blocking I/O)、NIO(Non-Blocking I/O)和AIO(Asynchronous I/O),接下来我们将详细介绍一下这些IO模型。

2023-12-13 11:02:09 387 1

原创 Java内存模型是什么?

当我们提到Java内存模型(Java Memory Model,简称JMM)时,我们脑海中可能首先会浮现出堆、栈、方法区和程序计数器等,但其实这些概念不是Java内存模型,这些概念是Java内存区域。要了解Java内存模型,我们先说一下它解决了什么问题,JMM是一种规范,它解决了Java并发中多线程通过共享内存进行通讯时,存在的本地内存数据不一致以及编译器指令重排带来的一些问题。简单点说就是JMM规范了程序中变量的访问规则,保障了并发操作的原子性、可见性和有序性的问题。

2023-12-01 10:58:12 414 1

原创 Java中有哪些方式可以创建对象?

可以通过class.newInstance()或constructor.newInstance()创建新的对象。这是我们最常用的创建对象的方式了,通过这种方式可以得到一个新的对象。通过这种方式需要原来的类实现Cloneable接口。先将对象序列化,再反序列化将会得到一个新的对象。这种方式是通过构造器得到新的实例。

2023-11-23 10:53:50 43

原创 数据库表中的数据加密后怎么模糊查询

随着互联网的进一步发展,用户接触到数据的渠道越来越多,那么数据安全性就显得越来越重要。通常我们会将一些重要的信息在数据库中进行加密后存储,比如:用户手机号码、身份证号码等。数据库加密可以保障敏感数据的安全性,那么加密后的数据怎么做模糊查询呢?

2023-11-09 22:41:38 499 1

原创 JDK21中的虚拟线程有

虚拟线程可能大家之前没有怎么听说过,但是如果我们了解过Golang的话就会知道,虚拟线程其实就是Golang中的携程。

2023-11-09 12:21:14 170 1

原创 Spring和Spring Boot有什么区别?

Spring是一个非常流行的、强大的Jave企业级开发框架,它提供了一系列的模块来支持不同的应用需求。如:web开发、事务管理、依赖注入、AOP和batch job等。而Spring Boot主要是简化Spring应用程序的开发和部署,特别是快速构建微服务应用程序和快速开发的web应用程序。

2023-10-13 10:08:45 45

原创 Spring Boot是怎么实现自动装配的?

自动装配是Spring Boot中最重要的高级特性之一,它不但可以减少重复代码的编写,而且还可以大大提高我们的开发效率。所谓的自动装配就是,Spring Boot会根据类路径中的jar包、类,为jar包中的类自动配置,这样可以极大的减少需要的配置。其实也就是,它会根据classpath下的类,自动给我们生成对应的Bean,然后加载Spring容器中。

2023-10-09 14:37:07 97 1

原创 JAVA中怎么做代码审查

代码审查(Code Review)的目的是为了发现 代码中可能存在的问题、缺陷和漏洞,并提出一些建设性的建议和意见。那么我们在做代码审查的时候通常会从哪些方面去审查呢?

2023-09-22 10:22:57 495

原创 Java中的ThreadLocal是什么?有什么作用

ThreadLocal是java提供的一个类,是用来解决java多线程并发问题的。它通过为每个线程创建一个独立的变量副本,ThreadLocal变量只能被当前线程访问和修改,其他线程无法访问和修改当前线程的ThreadLocal变量。从而实现线程安全。

2023-09-14 15:21:01 141 1

原创 JVM一次完整的GC流程

但是如果To Survivor区的空间存不下这些对象,那就需要进行空间分配担保,如果担保成功就正常进行Young GC,如果担保失败则说明老年代空间也不够了,这时候会触发一次Full GC。GC一般发生在对象创建时分配空间的过程中,当对象创建时会根据对象的大小决定对象是进入年轻代还是老年代。当对象大小超过一定的阈值就会被认为大对象,大对象会直接进入老年代,否则会进入年轻代。在年轻代中长期存活的对象,当GC次数达到一定的阈值后还没有被回收,它也会被放到老年代中。

2023-09-07 15:52:53 257

原创 深拷贝和浅拷贝有什么区别

在内存中,每个对象都有一个地址,这个地址指向内存中对象存储的位置。当我们用变量引用一个对象时,实际上是将对象的地址赋值给了变量。所以,如果我们将一个对象复制到另外一个变量中时,实际上是将对象的地址复制到了这个变量中。在Java中深拷贝和浅拷贝是复制对象的两种不同方式。

2023-09-01 16:24:00 69 1

原创 分布式锁Redlock怎么用,解决了什么问题

为了解决分布式锁存在的以上问题,Redis的作者提出了RedLock算法,能够有效防止单点故障的问题。RedLock通过使用多个Redis节点,来提供一个更健壮的分布式锁解决方案,能够在某些Redis节点故障的情况下,仍然能够保证分布式锁的可用性。

2023-08-25 16:50:08 213

原创 什么是缓存击穿、缓存穿透、缓存雪崩

但是这个key已经过期了,这时候这些请求会击穿缓存去直接请求到数据库,造成数据库的超负载。总结,这种情况是缓存中没有数据,但是数据库中有数据。就像在一道屏障上凿开了一个口子,突破了我们的缓存服务器直接请求到数据库,故名为缓存击穿。如果有恶意请求的话,会有大量请求落在数据库上,造成数据库压力过大,影响正常的业务。总结,这种情况是在缓存中没有数据,在数据库中也没有数据。当大量的key同时过期或者缓存服务器宕机时,这时候所有的请求过来都会直接打在数据库上。造成数据库超负荷运行,甚至造成数据库宕机。

2023-08-18 15:15:04 41 1

原创 什么是分布式事务

在单机系统中,我们只需要将扣库存和扣余额放在一个事务中即可,就能保证一致性、原子性和持久性。但是在分布式系统中,可能会存在多个服务对外提供服务(库存服务、账号服务)并且可能会分布在不同的物理节点上。此时,我们就需要确保所有服务操作的事务能够同步进行保持一致,避免出现数据不一致的情况。在分布式事务中,我们需要确保所有参与者的事务操作能够保持一致性。如XA协议,最大努力通知,Seta和TCC事务等。这些解决方案的实现各不相同,但是都考虑了如何确保所有参与者的事务操作能够保持一致性,以及处理可能出现的异常情况。

2023-08-10 10:26:49 26 1

原创 聚簇索引与非聚簇索引有什么区别

按照每张表的主键构建的索引,它将表数据按照主键的顺序存储在磁盘上。这种索引方式保证了表中行的存储顺序与主键顺序一致,并且聚簇索引的索引与数据存放在一起,找到索引的同时也找到了数据。聚簇索引默认是主键,所以一张表只能有一个聚簇索引。如果也没有,InnoDB会使用隐藏的_rowid列来作为聚簇索引。是指根据非主键字段创建的索引,也就是二级索引。它不影响表中数据的存储顺序,它通过创建一张索引表,用于存储索引列和对应行的指针。所以说非聚簇索引叶子节点存储的是主键和索引列的数据,在做查询的时候需要回一次表。

2023-08-03 17:50:53 44

原创 怎么使用Redisson实现分布式锁

分布式锁可以保证在分布式系统集群部署的时候,同一个方法在同一时间只能被集群中的一台机器的一个线程执行。Redisson是一个基于java的客户端,提供了很多功能。其中就包括分布式锁的实现,参考官当文档在加锁后可能会存在,业务逻辑还未处理完而锁已经到期释放的场景。因此,Redisson引入了Watch Dog(看门狗)的机制,它会定期监测业务是否处理完毕,如果业务还未执行完毕锁又快要到期了,他会自动帮我们把锁进行续期。

2023-07-26 10:57:45 411 1

原创 MySQL中的select查询会用到事务吗

即使没有明确的开启事务,InnoDB存储引擎也会为查询自动开启一个隐式事务。因此,可以说InnoDB所有的操作都是在事务中进行的。众所周知,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行。那么查询操作会用到事务吗?虽然,查询操作也会在事务的上下文中执行,但是它并没有对数据进行写的操作,所以事务。

2023-07-21 10:42:01 1824 1

原创 MySQL中的JOIN操作

在mysql中支持以下几种join操作:mysql中的join操作 JOIN方式 说明 INNER JOIN(内连接) 返回两个表中匹配的行。只有在两个表中都存在匹配的行时,才会返回结果。 LEFT JOIN(左连接) 返回左表中的所有行,以及与右表中匹配的行。如果右表中没有匹配的行,则返回NULL值。 RIGHT JOIN(右连接) 返回右表中的所有行,以及与左表中匹配的行。如果左表中没有匹配的行,则返回NULL值。 CROSS JOIN(交叉连接) 返

2023-07-17 16:04:17 78 1

原创 Spring事务的相关属性

REQUIRED(默认)

2023-07-07 10:53:59 48 1

空空如也

空空如也

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

TA关注的人

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