- 博客(65)
- 收藏
- 关注
原创 JWT+Token
瑞吉外卖的加强版苍穹外卖 初学在瑞吉外卖的基础上使用了JWT+Token实现登录功能 并且用的是手写mapper方法锻炼sql基础能力
2024-02-29 03:30:57
566
原创 Redis哨兵模式
在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。•客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例。•主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例。当设置的端口为7002的为主机时,当7002宕机时,会自动设置新的主机。
2023-11-10 14:17:36
220
原创 Redis-持久化+主从架构
RDB宕机恢复速度>AOF宕机恢复速度,因为RDB里面放的是数据,AOF放的是命令还需要执行,所以肯定慢些赛;RDB数据恢复优先级
2023-11-02 20:31:32
278
原创 面试题—JAVA基础①
(地址不变的情况下内容无法改变,如果要改变字符串内容的话,是要改变字符串所指向的地址的,后两者的源码中有自动扩容功能,如果要加内容的话直接在数组后面加就好了,空间不够的话会自动扩容,地址不会改变)3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
2023-10-24 04:42:53
786
1
原创 微服务13-Seata的四种分布式事务模式
XA模式分为两种情况:步骤:1.在yaml文件中开启XA代理模式2.添加@GlobalTransactional注解开启全局事务利用快照来保证事务的一致性,来进行数据回滚;:造成数据空转现象什么是脏写::对事务2造成数据空转现象进行处理利用了CAS的思想 :实际上是有两份快照的:before-image、after-image跟cas一样,before是我们要回滚目标的状态,而after是相当于验证的一个状态,如果满足after的内容,就可以设置为before;如果不一样不满足的话,就会判断不能
2023-10-13 03:51:17
1352
原创 微服务12-分布式服务理论基础+Seata的认识
单体架构1.项目过于臃肿,所有服务在一起,一个业务挂了,整个项目就不能用了;2.资源不能隔离,所有业务用一个资源,共享一个数据库,如果说一个业务突然增大——>导致数据库宕机了,那么其他业务就会受到影响;3.扩展不灵活,如果我们要对一个服务进行扩展,会将整个系统水平扩展;4.所有功能得一起上线,一起部署;1.数据一致性例子。
2023-10-13 02:22:47
836
原创 微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化
自定义异常——>用来解析请求资源的(一般用于授权规则里头)——>用来处理异常(根据是限流异常还是热点参数异常还是降级异常。。。设置状态信息)
2023-10-13 01:25:15
1570
原创 微服务10-Sentinel中的隔离和降级
线程池隔离支持主动超时,和异步调用,因为我们的服务调用每个请求用的都是独立的线程(因为隔离了嘛),所以不同服务调用之间是异步的,有利于增加效率与此同时,因为线程池大量开销——>因为线程之间的上下文切换会导致消耗资源较大;场景:低扇出,服务调用大量其他服务信号量隔离轻量级,用的是一个类似于Semaphore的计数器,当计数器为0,就拒绝请求,没有额外的线程开销;但是他不支持主动超时与异步调用,因为没有独立服务的独立线程嘛;场景:高扇出,网关进行转发,Sentinel这里我们需要注意几个点1.熔断降级。
2023-10-10 09:21:10
1040
原创 微服务09-Sentinel的入门
信号量隔离:用的还是tomcat池子,只是我们每一个业务都被限定了能够用多少个线程去访问,当请求数超过这个限定的数量时,就会拒绝访问了——>也就是说它会限制每个业务能使用的线程数量好处:不用创建线程池,节省资源,轻量级;坏处:隔离性较差,相当于吃大锅饭,每个规定了盛多少饭;线程池隔离:就跟我们上面的舱壁模式一样,每个业务分配一个线程池,线程池里面限定了一定的线程数,起到了隔离作用,当服务挂了也就浪费这个池子好处。
2023-10-09 22:47:06
1549
原创 微服务08-认识和使用SpringAMQP
exchange: 只能作为消息的转发,记住不能作为消息的缓存,如果路由失败消息就丢了交换机exchange:通过FanoutExchange返回交换机消息队列Queue:通过Queue返回消息队列将消息队列与交换机进行绑定Bingding:可以通过Binding中的bind方法进行绑定DirectExchang:可以根据规则路由到指定的消息队列。
2023-09-13 17:12:44
620
原创 微服务07-认识MQ+RabbitMQ入门
比如这里的支付服务,需要等待订单服务、短信服务…执行完毕才能执行,这样支付整个流程完毕需要500ms然后如果订单、仓储等其中一个服务挂掉了,那么支付服务请求请求不了,挂掉的服务越来越多,级联失败;——>服务提供者出现问题,那么整个微服务都会出现故障;资源浪费:消费者需要等待服务提供者响应,不能干其他事情只能干等;耦合度较高:每次加入新的需求,还需要动原来的代码——>比如:订单加了一个用户积分,那么Feign模块中还要加相关代码,以便订单模块调用,订单模块还需要+调用用户积分的代码:需要改动订单代码;
2023-09-13 11:33:09
418
原创 微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像
构建自定义镜像,如果一个个文件去拷贝打包,会非常麻烦;我们只需要告诉Docker,我们镜像的组成结构,需要哪些BaseImage、拷贝哪些依赖,需要哪些启动脚本,那么Docker将会帮助构建镜像;而DockerFile:是一个文本文件,里面的指令描述了要什么样的操作来构建镜像;不用端口是因为集群,自己访问就行了,所以端口不需要暴露;mysql:mysql:一个基于镜像构建的容器,并且挂载了两个目录web:一个基于临时构建的镜像容器,映射端口时8090。
2023-09-07 19:35:45
1186
原创 微服务05-Docker基本操作
docker exec -it 容器名字 命令:是进入容器后修改文件,因为容器是隔离性的,所以我们不能使用vi命令,非常不方便修改,而且修改时没有日志记录的;
2023-09-07 19:07:11
1081
2
原创 微服务04-Gateway网关
我们直接定义一个全局过滤器即可,实现GlobalFilterimport org/**/*** @param exchange:里面有request和response* @param chain:过滤器链* @return//1.得到request中的所有参数 MultiValueMap < String , String > params = request . getQueryParams();
2023-09-07 18:24:06
925
原创 Ribbon负载均衡+Nacos服务搭建
引:为了给服务减轻压力,我们可以给服务的实例们(8081、8082…)配置集群->杭州集群,上海集群等等…给服务实例配置集群1.修改yaml文件,给Nacos的配置加上cluster节点名称即可cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址cluster-name: hangzhou # 集群名称2.然后给对应的实例进行启动即可,(不要启动错了,不然会覆盖之前的集群名称)
2023-09-05 22:09:40
1047
原创 微服务01-基本介绍+注册中心EureKa
服务集群:一个请求由多个服务完成,服务接口暴露,以便于相互调用;注册中心:每个服务的状态,需要进行维护,我们可以在注册中心进行监控维护服务;配置中心:这些服务的配置我们都放在配置中心中配置,方便拉取配置信息,减少代码冗余;:耦合度高,所有代码量放在一个里面,打包编译时间会很长,动一个模块中的代码,其他的可能会受影响;分布式架构:对功能进行拆分,每个业务作为独立的项目作为独立项目开发,称为一个服务;方便升级,修改;:每个功能对应一种服务,避免业务重复开发,耦合度低,每个服务可以做一个对应的数据库,防
2023-09-04 22:38:14
645
1
原创 RestClient查询文档
全文检索的matchQuery和multiMatchQuery其实与matchAll的API基本一致,差别是查询的条件,也就是query那部分不一致;2.调用query方法,里面构成查询条件——>QueryBuilders来构建查询条件(比如下面的matchAllQuery())1.先创建SearchRequest对象,调用source方法(DSL)——>相当于红框内的大json。3.查询条件弄好后,再发送请求即可client调用search方法。
2023-04-13 22:27:19
702
原创 DSL查询文档
就比如场景:一个年级参加比赛,有尖子班和普通班(对应也就是ES集群两个分片),筛选最优秀的十个人参加比赛,你不可能是普通版参加十个,尖子班参加十个,因为你普通班的前十到尖子班可能就是倒数了,所以需要将结果聚合,重新筛选,选出最优秀的十个。1.首先,在query下定义一个function_score,我们根据算分搜索数据,query查询能够match到的文档(比如我们这里的name:“外滩”),里面包含符合的词条(并且用BM25算法默认打分)比如关键字的搜索,像酒店名字等等,可以放到must里面。
2023-04-13 09:41:21
779
原创 elasticsearch操作
index、_type(7.0后已固定)、_id三者唯一确定一个具体文档。如同数据库数据一样,数据库库、表、主键值唯一确定一条数据。我们的type在版本7.0之后默认都为_doc,如果用type会有Deprecation提示。当不指定文档id时,我们用PUT请求会报错,所以说提交文档要用POST请求。将must改为should就是或(OR)查询’指定文档id,是存在时更新文档。
2023-04-13 08:57:44
80
原创 ES索引库操作
有了索引库相当于数据库database,而接下来,就是需要索引库中的类型了,也就是数据库中的表;创建表——>需要设置字段的约束;索引库也一样——>在创建索引库类型的时候,需要知道这个类型下有哪些字段(每个字段对应一些约束信息)——>这些字段以及对应的约束信息就叫:字段映射type:数据类型->记住,es中是没有数组的,但是数组中的属性是有类型的keyword——>不分词text——>代表要分词index:是否索引(是否参与搜索)true:表示字段会被索引(可以用来搜索),false:不能用来搜索;
2023-04-13 08:50:07
2214
原创 初识Elasticsearch
好处:可以帮助从海量数据中查找需要的内容;一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能;什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、logstash(数据收集)、Kibana(图形展示)、elasticsearch;Lucene:是一个搜索类库,提供了很多api,elasticsearch是基于此实现的;正排索引:每一行进数据行遍历,看其中的内容是否满足条件,如果满足就将其放入词库中,否则进行删除;
2023-04-12 22:12:45
733
原创 使用AOP的事务管理以及实例
简单介绍了AOP的事务管理如何使用 以及介绍AOP事务管理系统中银行管理系统追加日志案例 创建了新事物 使其在总事务运行失败回滚的同时新事物不被影响 任然记录其转账日志
2023-02-26 21:33:29
374
原创 结合JSP以及会话技术和代码拦截还有事件绑定的代码实战
结合了JSP中的el表达式 c:foreach的使用并且结合会话技术存储Cookie和Session的使用 以及各种事件绑定和焦点失去问题以及验证码校验问题
2022-12-28 11:50:00
322
原创 Filter拦截器的使用
Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。Servlet 我们之前都已经学习过了,Filter和Listener 我们今天都会进行学习。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。如下图所示,浏览器可以访问服务器上的所有的资源(servlet、jsp、html等)而在访问到这些资源之前可以使过滤器拦截来下,也就是说在访问资源之前会先经过 Filter,如下图拦截器拦截到后可以做什么功能呢?
2022-12-28 11:32:53
752
原创 Request和Response的使用以及html连接java同步到数据的实例
Request是请求对象,Response是响应对象。获取请求数据浏览器会发送HTTP请求到后台服务器[Tomcat]HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务设置响应数据。
2022-12-18 09:34:57
716
原创 JDBC和MyBatis的使用
JDBC 就是使用Java语言操作关系型数据库的一套API全称:( Java DataBase Connectivity ) Java 数据库连接我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。
2022-12-16 08:42:16
2858
原创 MySQL中存储过程和存储函数以及触发器的基础知识
MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序。与一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。存储程序就是一条或者多条SQL语句和控制语句的集合,我们可以将其看作MySQL的批处理文件,当然,其作用不仅限于批处理。当想要在不同的应用程序或平台上执行相同的功能一段程序或者封装特定功能时,存储程序是非常有用的。
2022-12-14 20:51:18
683
空空如也
filter拦截问题
2023-03-17
前端页面中怎么实现一个自动运行的判断功能
2023-03-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人