- 博客(46)
- 收藏
- 关注
原创 微服务保护-sentinel
什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.htmlSentinel 具有以下特征:•丰富的应用场景。
2024-11-23 21:48:46
816
1
原创 Docker基本操作
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了。
2024-11-19 10:53:17
1205
原创 初识Docker
微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题。
2024-11-18 20:50:44
757
原创 Docker安装
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为stabletest和nightly三个更新频道。官方网站上有各种环境下的,这里主要介绍 Docker CE 在 CentOS上的安装。
2024-11-18 20:48:40
860
原创 SpringCloud-Gateway服务网关
过滤器的作用是什么?① 对路由的请求或响应做加工处理,比如添加请求头② 配置在路由下的过滤器只对当前路由的请求生效defaultFilters的作用是什么?① 对所有路由都生效的过滤器参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截实现:@Order(-1)@Component@Override// 1.获取请求参数// 2.获取authorization参数// 3.校验// 放行。
2024-11-06 19:53:48
846
1
原创 SpringCloud-Nacos注册中心
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
2024-11-06 00:53:37
1119
原创 SpringCloud-Feign远程调用
使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。
2024-11-05 11:16:29
1554
原创 Nacos集群搭建
官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们计划的集群结构:此处的IP是你自己服务的IP,不一定要按照我的来。
2024-11-05 09:56:23
1153
原创 SpringCloud-Ribbon负载均衡
SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。用一幅图来总结一下:拦截我们的RestTemplate请求http://userservice/user/1RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka拉取服务列表。
2024-11-05 00:50:09
872
原创 SpringCloud-Eureka注册中心
假如我们的服务提供者user-service部署了多个实例,如图:大家思考几个问题:这些问题都需要利用SpringCloud中的注册中心来解决,其中最广为人知的注册中心就是Eureka,其结构如下:问题1:order-service如何得知user-service实例地址?获取地址信息的流程如下:问题2:order-service如何从多个user-service实例中选择具体的实例?问题3:order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?因此,接下来我们动手
2024-11-05 00:37:33
987
原创 微服务SpringCloud
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。
2024-11-04 20:19:49
607
原创 Java八股文-Mysql
Mysql索引不是越多越好,索引可以提高查询性能,但它们也会占用更多的存储空间,并且在插入、更新和删除数据时会增加额外的开销,因为索引也需要被更新。过多的索引可能导致性能问题,因为数据库需要更多的时间来维护这些索引。MVCC是 MySQL 中用于实现高并发事务处理的一种机制。它允许多个事务在同一时间对同一数据进行读写操作,而不会相互干扰,从而提高数据库的并发性能。(MySQL 允许在唯一索引列中包含多个 NULL 值,因为 NULL 被视为不同的值。唯一索引列允许空值,而主键列不允许空值。
2024-10-24 21:53:30
434
1
原创 在 MySQL 中,添加索引后,插入、更新和删除操作的性能通常会变慢的原因
添加索引后,插入、更新和删除操作变慢的主要原因是索引维护成本、锁机制、日志记录、缓冲池管理以及索引碎片等因素。虽然索引可以提高查询性能,但在高写入负载的情况下,需要权衡索引带来的性能影响。
2024-10-24 21:19:50
1408
原创 SpringDateRedis的使用方式
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。Spring Boot提供了对应的Starter,maven坐标:</</</ValueOperations:string数据操作SetOperations:set类型数据操作。
2024-10-19 22:16:57
713
原创 Redis的下载与安装
通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。默认提供的客户端连接工具界面不太友好,同时操作也较为麻烦,接下来,引入一个Redis客户端图形工具。重启Redis后,再次连接Redis时,需加上密码,否则连接失败。设置Redis服务密码,修改redis.windows.conf。当Redis服务启动成功后,可通过客户端进行连接。此时,-h 和 -p 参数可省略不写。Redis服务默认端口号为。即可停止Redis服务。安装完毕后,直接双击启动。
2024-10-19 22:10:58
1389
原创 Redis可视化软件安装
软件链接:https://pan.baidu.com/s/1YxCxwoy12G_p8IR5KcPgmQ?pwd=1111
2024-10-19 21:21:53
333
原创 Redis
缓存是一种临时存储数据的技术,用于加快数据访问速度和减少对原始数据源的访问次数Redis是目前最流行的一个开源的内存数据库Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。添加链接描述Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。EHCacheCaffeineRedis(常用)
2024-10-19 11:26:51
1170
原创 IDEA重要的快捷键
Ctrl + Alt + Shift + N:查找符号(方法、变量等)Ctrl + Shift + Backspace:跳转到上次编辑位置。Ctrl + Alt + U:生成类的继承关系图(UML 类图)。Ctrl + Alt + B:查看类的实现关系。Ctrl + Shift + N:查找文件。Ctrl + Alt + M:提取方法。Ctrl + U:跳转到父类或接口。Ctrl + N:查找类。
2024-09-27 00:33:42
576
原创 拦截器Interceptor
是一种动态拦截方法调用的机制,类似于过滤器。拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。拦截请求,在指定方法调用前后,根据业务需要执行预先设定的代码。在拦截器当中,我们通常也是做一些通用性的操作,比如:我们可以通过拦截器来拦截前端发起的请求,将登录校验的逻辑全部编写在拦截器当中。在校验的过程当中,如发现用户登录了(携带JWT令牌且是合法令牌),就可以直接放行,去访问spring当中的资源。如果校验时发现并没有登录或是非法令牌,就可以直接给前端响应未登录的错误信息。
2024-09-27 00:32:01
802
原创 过滤器Filter
通过浏览器的开发者工具,我们可以看到在后续的请求当中,都会在请求头中携带JWT令牌到服务端,而服务端需要统一拦截所有的请求,从而判断是否携带的有合法的JWT令牌。那怎么样来统一拦截到所有的请求校验令牌的有效性呢?
2024-09-25 15:53:18
1001
原创 Maven私服
*私服:**是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。本地仓库私服仓库中央仓库**注意事项:**私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。
2024-09-19 21:23:09
1491
原创 Maven继承与聚合
在maven中,可以在父工程的pom文件中通过来统一管理依赖版本。--统一管理依赖版本--> < dependencyManagement > < dependencies > <!
2024-09-19 21:09:19
1020
原创 分模块设计与开发
所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多个模块进行开发。1). 未分模块设计的问题如果项目不分模块,也就意味着所有的业务代码是不是都写在这一个 Java 项目当中。随着这个项目的业务扩张,项目当中的业务功能可能会越来越多。假如我们开发的是一个大型的电商项目,里面可能就包括了商品模块的功能、搜索模块的功能、购物车模块、订单模块、用户中心等等。这些所有的业务代码我们都在一个 Java 项目当中编写。
2024-09-19 19:55:19
1130
原创 AOP核心概念
Spring的AOP底层是基于动态代理技术来实现的,也就是说在程序运行的时候,会自动的基于动态代理技术为目标对象生成一个对应的代理对象。 在入门程序中是需要统计各个业务方法的执行耗时的,此时我们就需要在这些业务方法运行开始之前,先记录这个方法运行的开始时间,在每一个业务方法运行结束的时候,再来记录这个方法运行的结束时间。AOP的核心概念我们介绍完毕之后,接下来我们再来分析一下我们所定义的通知是如何与目标对象结合在一起,对目标对象当中的方法进行功能增强的。抽取出来的这一部分重复的逻辑,也就是共性的功能。
2024-09-18 21:28:27
396
原创 Spring AOP
AOP(Aspect-Oriented Programming)中文翻译为面向切面编程,面向方面编程在AOP中,可以理解为就是面向方法编程。
2024-09-18 20:43:12
631
原创 springboot常见错误一
这种情况可以检查一下启动类有没有不小心放在一个单独的包里面。前端界面报错404,什么都加载不出来。这种情况,我们只要把启动类拿出就行。后端却没有报任何错误。
2024-09-12 10:10:06
131
原创 LocalDate类、LocalTime类、LocalDateTime类
JDK8新增的日期类分得更细致一些,比如表示年月日用LocalDate类、表示时间秒用LocalTime类、而表示年月日时分秒用LocalDateTime类等;除了这些类还提供了对时区、时间间隔进行操作的类等。它们几乎把对日期/时间的所有操作都通过了API方法,用起来特别方便。先学习表示日期、时间、日期时间的类;有LocalDate、LocalTime、以及LocalDateTime类。仔细阅读代码,你会发现这三个类的用法套路都是一样的。为什么以前的Date类就可以表示日期,为什么要有新增的日期类呢?
2024-08-10 09:37:41
355
原创 SimpleDateFormat类
前面我们打印Date对象时,发现打印输出的日期格式我们并不喜欢,SimpleDateFormat类就可以转换Date对象表示日期时间的显示格式。注意:创建SimpleDateFormat对象时,在构造方法的参数位置传递日期格式,而日期格式是由一些特定的字母拼接而来的。我们需要记住常用的几种日期/时间格式最后,上代码演示一下。
2024-08-10 09:24:33
248
原创 Date类
Date对象记录的时间是用毫秒值来表示的。Java语言规定,1970年1月1日0时0分0秒认为是时间的起点,此时记作0,那么1000(1秒=1000毫秒)就表示1970年1月1日0时0分1秒,依次内推。下面是Date类的构造方法,和常见的成员方法,利用这些API写代码尝试一下。Date类,Java中是由这个类的对象用来表示日期或者时间。
2024-08-10 09:13:00
220
原创 ThreadLocal与synchronized的区别
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。总结:在例子中,虽然使用ThreadLocal和synchronized都能解决问题,但是使用ThreadLocal更为合适,因为这样可以使程序拥有更高的并发性。
2024-08-08 19:59:06
449
1
原创 为什么多线程需要用锁synchronized
在多线程环境中,当多个线程同时访问和修改共享资源时,如果没有适当的同步机制,就可能导致数据竞争。数据竞争是指多个线程同时访问和修改同一资源,导致数据的不一致和错误。为了解决这个问题,需要使用加锁技术,如互斥锁、读写锁、递归锁等,来确保对共享资源的访问是顺序的或排他的。加锁可以防止多个线程同时修改同一数据,从而避免数据的不一致和错误。此外,加锁还可以解决不同线程的子步骤有顺序关联性的问题。
2024-08-08 19:19:36
597
原创 ThreadLocal
ThreadLocal类用来提供线程内部的局部变量。这种变量子在多线程环境下访问(通过get和set方法)时能保证各个线程的变量相对独立于其他线程内的变量,ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。我们可以得知的ThreadLocal的作用是:提供线程内的局部变量,不同的线程之间互不干扰,这种变量在线程的生命周期内起作用,减少一个线程内多个函数或组件之间一些公共变量传递的复杂度。
2024-08-05 16:42:03
1059
原创 运行SQL文件错误
MySQL 5.7确实不支持COLLATE utf8mb4_0900_ai_ci。这是因为utf8mb4_0900_ai_ci字符集排序规则是在MySQL 8.0版本中引入的,而MySQL 5.7版本并不支持这个特性。因此,如果在MySQL 5.7环境中尝试使用utf8mb4_0900_ai_ci字符集排序规则,将会遇到兼容性问题12。可以发现是因为无法识别utf8mb4_0900_ai_ci字符集。如果应用程序对字符集和排序规则有特定的要求,可能需要仔细评估升级或修改脚本的潜在影响。
2024-08-03 10:12:42
807
原创 Cannot resolve symbol
这样爆红的问题,明明名称写的是正确的,但却爆红,提示“Cannot resolve symbol ‘driver’”,当时我翻遍了全网相关的解决方案都没有解决,最后才发现“不用解决才是最好的解决方案”,因为最后测试发现,虽然爆红,但仍然可以连接到数据库,所以说这个完全不用管它,只要你名称写的是对的就行。不知道有没有小伙伴们和我一样在学mybatis时,配置数据库环境的时候遇到。
2023-06-11 13:59:05
868
原创 微信小程序-页面导航
open-type=“navigate” 也可以省略不写 都可以跳转到非导航界面。tabBar页面指的是被配置为tabBar的页面。
2023-04-22 21:14:13
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人