自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务的常见解决方案

问题:seata实现事务是默认AT模式,其实在我们查看源码中会发现seata里面使用加锁的方式。这会导致在并发的情况下我们效率是很低的,所以seata实现分布式事务只是适用于后台管理类型的分布式事务情况,不适用于高并发的分布式事务处理。,此时我们就可以使用之前提到的柔性事务-可靠消息-最终一致性方案。入用rabbitmq的消息可靠性保证消息的可靠,用队列(死信队列)来完成补偿机制,最终达到我们的柔性事务。以下我们重点介绍下2pc和 柔性事务-可靠消息-最终一致性方案。2.柔性事务-TCC补偿方案。

2023-08-24 15:24:24 202

原创 Fegin异步情况丢失上下文问题

在微服务的开发中,我们经常需要服务之间的调用,并且为了提高效率使用异步的方式进行服务之间的调用,在这种异步的调用情况下会有一个严重的问题,丢失上文下。案例:feign异步获取订单明细的案例代码。

2023-08-24 14:47:02 1008

原创 Feign远程调用丢失请求头的问题

在微服务的开发中,我们需要经常操作服务和服务之前的通信,也就是说需要远程调用,但是在服务的调用中会发生一个严重的问题,就是都是请求头。

2023-08-24 14:36:56 209

原创 MQ消息队列(主要介绍RabbitMQ)

在实际的开发中我们经常会有取消订单的功能,就可以使用消息队列延迟消费消息,具体实现通过个死信队列,把消息先放到死信队列,当消息到期之后转到到期队列,监听到期队列然后达到订单取消功能。问题1:以上消息发送和消费中,如果传输的数据是java对象,默认使用的jdk序列化机制,我们经常需要使用json传递就需要修改传输格式json。问题2:在消息的发送和消费还有消息储存过程中,我们需要保证消息的可靠性,避免消息的丢失保证业务数据的正确。通过以上消息的发送和消费端都确认之后我们消息一定的是可靠的。

2023-08-23 18:08:15 1300

原创 SpringSession

在经过以上的操作之后我们在想session储存数据,就会储存到redis中,但是需要注意的是,默认是使用jdk序列化的方式储存,一般情况为了房方便查看储存的数据我们可以配置储存格式为json。Spring Session 是 Spring 的项目之一。HttpSession 的方案,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的。(springsession储存session数据的方式有很多,我们常见使用redis)

2023-08-23 14:49:38 408

原创 分布式下的session共享问题

首页我们确定在分布式的情况下session是不能共享的。1.不同的服务,session不能共享,也就是微服务的情况下2.同一服务在分布式情况,session同样不能共享,也会是分布式情况。

2023-08-23 14:25:35 1211

原创 CompletableFuture异步编排

CompletableFuture 是 Java 8 中新增的一个异步编程工具类,它是基于 Future 和 CompletionStage 接口构建的,可以与 Java 8 中的 Stream API 配合使用,也能够与 Java 9 中的 Reactive Stream API 进行交互。主要用于异步执行任务并返回结果,实现异步计算和操作组合。它提供了一种灵活、可组合的方式来实现异步计算,同时也提供了异常处理、取消、超时等特性。

2023-08-23 11:12:20 99

原创 SpringCache

注意:以上缓存使用中会有问题,如:缓存没有失效时间,缓存自动生成key,缓存数据是jdk序列化的数据,一般我们需要是json数据,所以需要自定义配置,缓存的key和存活时间都可以通过配置解决,但是缓存的序列化方式就需要自定义配置。Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。经过以上的操作之后就可以使用缓存提供的常见注解来操作缓存。

2023-08-23 10:14:32 253

原创 缓存一致性问题

但是不管那种模式在并发情况都会有问题: 双写模式问题:在并发写的情况由于卡顿或者其他原因导致线程2线先执行完毕,线程一写入的缓存就没有线程2最新的数据,此时就出现了脏数据。在开发中我们为了提高查询效率,经常使用缓存(典型的缓存技术redis),但是在缓存的使用中我们经常遇到缓存和一致性问题(缓存的数据和数据库的数据不一致)补充:Canal在实际开发中经常用于数据的异构处理(就是不同的用户展示的数据不一致,比如:一些购物类的网站,会根据用户的访问习惯在首页推荐不同的商品)

2023-08-22 18:43:53 97

原创 Redisson 分布式锁

Redisson是基于Redis的Java客户端,提供高级功能如分布式锁、分布式集合和分布式对象。Redisson提供更友好的API,支持异步和响应式编程,提供内置线程安全和失败重试机制。如果同时写,也必须等待写锁释放才行,阻塞的方式、如何。如果都是读,则都会同时加锁成功,可以理解为无锁。读写锁:保证一定能读到最新数据,修改期间写锁是一个排他锁。如果先写后读,则必须等待写锁释放才行。Redis是基础客户端库,可用于执行基本操作。信号量:典型案例车库停车等。读锁:是一个共享锁,和无锁是一样的。

2023-08-22 17:12:33 1163

原创 ElasticSearch常用方法

在互联网项目中我们经常会按一定的条件去索引我们指定的数据,但是在大量的数据中我们如果直接查询数据库效率是非常低的,ElasticSearch就可以很好的帮我们完成检索。springboot整合es:Elasticsearch-Rest-Client: 官方 RestClient,封装了 ES 操作,API 层次分明,上手简单。GET /_cat/indices:查看所有索引 show databases。查询:term 查询固定的值 如:age:18。es封装了api提供给我我们直接操作:_cat。

2023-08-22 14:59:09 1654

原创 sentinel的基本使用

在一些互联网项目中高并发的场景很多,瞬间流量很大,会导致我们服务不可用。

2023-08-22 13:50:13 1104

转载 springboot中的事务

springboot中的事务。

2023-08-11 15:40:23 47

原创 springmvc实现页面直接跳转(不需要编写controller空方法)

这种书写可以完成路径映射,但是空方法没有多大意义。总结:实现WebMvcConfigurer接口 重写addViewControllers方法,在该方法中配置映射关系。实际开发中经常有croller方法只是为了映射页面路径跳转关系,该方法没有任何逻辑(空方法)

2023-07-27 11:35:58 193

原创 nacos实现config配置中心

nacos实现config配置中心

2023-05-30 11:43:23 141

原创 springcloud通过Feign实现远程调用

3.编写远程调用接口,需要指定被调用的服务名,方法和需要调用的服务方法完全一致。4.测试,注入远程调用对象,直接使用方法就行。2.开启远程调用,启动类上添加。

2023-05-30 11:24:56 85

转载 Centos7上面安装docker步骤

Centos7安装配置Docker_centos7安装docker_不知名架构师的博客-CSDN博客

2023-05-24 17:18:19 57

原创 spring cloud config配置中心

在一个基于微服务的在分布式系统中,业务非常的繁多,划分的微服务数量也特别的多,每个服务都有相应的配置,除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说SSO存储.短信相关、邮件相关,或者一些业务上的开关。如果这么多的服务配置都单独管理的话那将是令人崩溃的一件事,所以如何能够对微服务中的配置文件做到统一集中管理、服务配置修改后无需重启就变得非常的迫切,为了解决这样的问题就需要分布式配置中心组件。

2023-03-24 15:57:56 227

原创 spring cloud Hystrix熔断器

此时若库存服务因自身处理逻辑等原因造成响应缓慢,会直接导致创建订单服务的线程被挂起,以等待库存服务的响应,在漫长的等待之后用户会因为请求库存失败而得到创建订单失败的结果。在微服务架构中,如果一个服务出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,即引起雪崩效应。在微服务调用的时候Hystrix 可以实现服务的调用状况监控,这样我们可以知道调用服务成功的、失败的、超时的、出现错误等情况,默认的Hvstrix监控信息非常的不耐看,所以这里我们使用Dashboard进行查看调用情况;

2023-03-24 15:16:13 184

原创 spring cloud的负载均衡ribbon

我们思考一个问题,当我们应用的用户量和业务量多起来之后,我们发现一个order-service节点处理的量已经不能满足我们了,我们需要准备多个order-service才可以,于是我们在Eureka中注册了多个订单微服务用来处理高并发下的订单业务 (集群) ,那么客户端该如何选择由哪一个微服务处理请求呢?典型的就是nginx,在集群前添加一个Nginx,所有访问集群节点的请求都会交给nginx,然后由nginx进行反向代理,利用轮询等负载均衡的算法命中某个节点进行转发请求,即负载均衡是由服务端实现;

2023-03-24 11:39:02 191

原创 springcloud Zull网关

可以想象一下,当我们的微服务项目比较多的时候,每一个微服务的端口号不一致,甚至肯定因为部署的节点不同导致IP地址也不同,那么这对于web前端来说将是一个噩耗,前端访问后台的接口地址可能根据访问不同的微服务而变化,甚至多次请求访问不同微服务,请求不统一,增加了客户端的复杂度和暴露了服务器IP+端口号容易遭受到攻击行为;在实际场景中现在高并发的场景越来越多,有些场合下限流措施肯定是必须的(例如: 秒杀业务),现在的限流方式主要有三种:计数器算法、令牌桶算法和漏桶算法;3.配置文件配置路由。

2023-03-24 11:22:43 403

原创 Eureka搭建高可用集群

Eureka通过多个节点相互注册的方式来实现集群高可用。为了在单机模拟HA配置方式,可以采用在单机监听两个不同端口的方式启动更多个实例。

2023-03-24 11:08:07 290

原创 spring cloud服务之间的调用Fegin

这里我们主要介绍Feign方式来实现微服务之间的互相通信;

2023-03-24 11:06:20 217

原创 spring cloud核心组件

注意:在创建项目的时候需要注意spring cloud 和spring boot的版本。

2023-03-24 10:52:54 38

原创 springboot中使用rabbitmq

交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用 ack模式后,交换机找不到队列会返回错误。Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的。定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发。的交换机模式,也是最简单的模式,根据 key 全文匹配去寻找队列。Fanout Exchange 广播者模式或者订阅者模式。在这种交换机下,队列和交换机的绑定会。消费者模式和简单模式一致。消费者和简单模式一致。

2023-03-22 17:17:46 384

原创 redis缓存穿透、击穿、雪崩问题

缓存穿透是指用户每次请求访问的key在redis中不存在并且数据库中也不存在的时候,因为数据库中也不存在所以缓存中会一直不命中也就是说查找不到,这样请求就会一直访问到存储数据库 (Mysql) 中去,当请求量超出数据库的承受压力时,便会导致数据库崩溃。缓存雪崩指的是redis中存在缓存key,但是出现大量的热点key过期时间相同,在某一时刻,缓存中大量key过期,而此时大量高并发请求访问,会直接访问存储数据库,导致数据库崩溃。提前设置热门数据到缓存中,或适当延长缓存中key过期时间。

2023-03-22 11:39:19 290

原创 redis分布式锁及其应用

如果一个锁支持同一个线程的多次加锁,那么这个锁就是可重入的。缺陷: 在finally中我们先从redis中获取lock的值进行比较,然后再进行delete删除锁,但是这两个操作在redis中并不是原子性操作,在高并发下也可能会出现比较值成功了要马上删除锁,但是锁的时效时间却到了其他的key可以获取锁了,这时候就出现跟方式二类似的问题。该方式的实现跟方式一几乎差不多,只不过是在finally中释放锁的时候进行了一次锁value的校验,这样释放锁能够确保释放的是自己的锁而不是其他key的锁。

2023-03-22 10:56:02 289

原创 springboot配置redis主从+sentinel(哨兵)+cluster(集群)

通过查看redis配置源码,我们发现redis加载配置的顺序为: 哨兵 -> 集群-> 单机。

2023-03-21 19:23:25 2048

原创 redis集群模式 -cluster

RedisCluster是去中心化的,我们需要将每个redis节点设置成集群模式,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。cluster集群中的每个节点会被平分到一定数量的哈希槽用来存储数据,这样不管是集群中那个几点进行key的操作都需要去16384个哈希槽中寻找对应的槽然后寻找key即可。当遇到大的数据占用redis内存,或者说高并发的数据和流量都超过了单台redis的处理能力的时候,我们就需要搭建使用redis的集群模式了。

2023-03-21 19:22:32 342

原创 redis哨兵模式-Sentinel

Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。因为Sentinel本身也需要多个哨兵共同确认主节点是否宕机,所以一个稳健的 Redis Sentinel集群建议至少使用三个 Sentinel 实例,并且保证讲这些实例放到不同的机器上,甚至不同的物理区域。主节点挂掉了,原先的主从复制也断开了,客户端和损坏的主节点也断开了。客户端通过新的主节点继续进行交互。

2023-03-21 18:43:40 36

原创 redis主从同步

在从节点中需要通过replicaof (redis5.0以下使用slaveof) 配置master的IP和端口号,master的IP我们通过docker inpect命令查看“Networks”下的“IPAddress”即可看到(最好使用服务器的公网IP):另外如果master配置了连接密码,需要使用。: 按照之前搭建redis一样创建redis-master容器,配置信息的时候,我们给其添加访问密码 (不然从数据库无法连接上,当然我们也可以设置“protected-mode no”这样就不需要设置密码)

2023-03-21 18:28:45 301

原创 redis的持久化策略

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能(默认是开启的),将数据保存到磁 盘上;RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集dump写入rdb格式的临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。AOF持久化是以日志的形式记录服务器所处理的每一个更新操作 (写入,删除) ,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

2023-03-21 16:59:33 114

原创 redis中事务

在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。批量操作在发送 EXEC 命令前被放入队列缓存。multi:开始一个事务。

2023-03-21 16:45:30 36

原创 springboot整合redis

引入 spring-boot-starter-data-redis和json解析依赖。配置RedisConfig,对redis的key和value进行序列化配置。在application.yml配置 Redis。

2023-03-21 16:40:05 53

原创 redis的基本使用

keys* 查看所有 keys a* 查看以a开头的 eys a?注意:如果key已经设置过期时间,然后你调用了set修改它,它的过期时间会消失。exists keyl,key2,key3 返回的是存在的key的数量。exists key 查看key是否存在,返回1表示存在,0不存在。zset 相当于SortedSet 和 HashMap 的结合体。清空redis服务器的所有数据: flushall。清空所有的 key: flushdb。type key 查看key的类型。Bitmaps 位图。

2023-03-21 15:49:55 35

原创 springboot+swagger使用

地址:端口号/项目名/swagger-ui.html 进入api文档页面。在UserController中使用API相关注解描述接口。配置yml和SwaggerConfig。在pom文件中导入相关依赖;运行项目,并查看API文档。

2023-03-20 11:41:08 28

原创 mybatisplus代码生成器

在我们以前进行项目开发的时候,我们的工程中都要有entity、dao、service、controller,其中entity实体类我们可以通过数据库自动生成,但是其他的类还是需要我们自己写。而MybatisPlus提供了代码生成器可以帮我们自动生成日常CRUD的上述代码和包结构,非常的Nice!

2023-03-17 16:01:52 48

原创 mybatisplus插件使用

为了防止利用接口漏洞对数据库进行恶意的全表更新删除操作,MybatisPlus提供了插件BlockAttacklnnerlnterceptor避免这个问题,我们只需要添加这个插件无须多余配置即可使用。放置全表更新和删除插件。

2023-03-17 16:00:13 60

原创 mybtaisplus的扩展功能

我们可能见到过这样的操作,就是如果我们在京东app上把订单删除了,还可以在网页版中进行恢复,这其实就是在告诉我们该订单并没有在数据库中删除,而可能做了删除数据迁移或者是做了个删除的标记只要我们查询订单的时候不查询标记已删除的订单就行了,而这样的操作就是逻辑删除了。我们知道我们的数据源很多人都直接配置在application中间中,并且是明文的,这样就可能导致我们的数据库账号密码呗泄露的危险,而MybatisPlus可以对我们配置数据源的账号和密码进行加密。这样我们就可以分析到我们那些sq[执行的慢了。

2023-03-17 15:48:10 38

原创 mybatisplus

内置通用的Service、通用的Mapper。mapper接口需要继承。service需要实现。

2023-03-17 15:33:36 33

空空如也

空空如也

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

TA关注的人

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