自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓存问题之面试问题汇总

当然,这个过程也要加互斥锁,但由于重建缓存是异步的,而且获取锁失败也无需等待,而是返回旧数据,这样性能几乎不受影响。:缓存击穿往往是由热点Key引起的,当热点Key过期时,大量请求涌入同时查询,发现缓存未命中都会去访问数据库,导致数据库压力激增。第一种是基于互斥锁,当发现缓存未命中时需要先获取互斥锁,再重建缓存,缓存重建完成释放锁。需要注意的是,无论是采用哪种方式,在获取互斥锁后一定要再次判断缓存是否命中,做dubbo check. 因为当你获取锁成功时,可能是在你之前有其它线程已经重建缓存了。

2024-08-07 23:44:22 255

原创 缓存问题之缓存击穿

当某个key缓存失效时,如果这个key是热点key,并发访问量比较高。就会在一瞬间涌入大量请求,都发现缓存未命中,于是都会去查询数据库,尝试重建缓存。问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。线程1发现缓存未命中,准备查询数据库,重建缓存,但是因为数据比较复杂,导致查询数据库耗时较久。在这个过程中,一下次来了3个新的线程,就都会发现缓存未命中,都去查询数据库。逻辑过期:热点key不要设置过期时间,在活动结束后手动删除。

2024-08-07 23:42:41 163

原创 缓存问题之缓存雪崩

给业务添加多级缓存,比如先查询本地缓存,本地缓存未命中再查询Redis,Redis未命中再查询数据库。即便Redis宕机,也还有本地缓存可以抗压力。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。给不同的Key的TTL添加随机值,这样KEY的过期时间不同,不会大量KEY同时过期。利用Redis集群提高服务的可用性,避免缓存服务宕机。给缓存业务添加降级限流策略。

2024-08-07 23:41:09 208

原创 缓存问题之缓存穿透

什么是缓存穿透呢?我们知道,当请求查询缓存未命中时,需要查询数据库以加载缓存。但是大家思考一下这样的场景:如果我访问一个数据库中也不存在的数据。会出现什么现象?由于数据库中不存在该数据,那么缓存中肯定也不存在。因此不管请求该数据多少次,缓存永远不可能建立,请求永远会直达数据库。假如有不怀好意的人,开启很多线程频繁的访问一个数据库中也不存在的数据。由于缓存不可能生效,那么所有的请求都访问数据库,可能就会导致数据库因过高的压力而宕机。解决这个问题有两种思路:缓存空值布隆过滤器。

2024-08-07 23:40:13 899

原创 缓存问题之缓存一致性

要知道线程1执行写缓存的速度在毫秒之间,速度非常快,在这么短的时间要完成数据库和缓存的操作,概率非常之低。,添加缓存的目的是为了提高系统性能,而你要付出的代价就是缓存与数据库的强一致性。此时线程2来查询,发现缓存未命中,于是查询数据库,写入缓存。同时我们还要给缓存加上过期时间,一旦发生缓存不一致,当缓存过期后会重新加载,数据最终还是能保证一致。的写操作是要在更新数据库的同时删除缓存,那为什么不选择更新数据库的同时更新缓存,而是删除呢?线程1将数据写入缓存之前,线程2来了,更新数据库,删除缓存。

2024-08-07 23:37:39 411

原创 Redis内存回收

Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。当内存达到上限,就无法存储更多数据了。因此,Redis内部会有两套内存回收的策略:内存过期策略内存淘汰策略。

2024-08-07 23:33:00 681

原创 分布式缓存之搭建Redis分片集群

主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决:海量数据存储高并发写要解决这两个问题就需要用到分片集群了。分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。Redis分片集群的结构如图:分片集群特征:集群中有多个master,每个master保存不同分片数据 ,解决海量数据存储问题每个master都可以有多个slave节点 ,确保高可用master之间通过ping监测彼此健康状态 ,类似哨兵作用。

2024-08-07 23:15:22 599

原创 分布式缓存之搭建Redis主从集群+全量同步/增量同步

简述全量同步和增量同步区别?全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave什么时候执行全量同步?slave节点第一次连接master节点时slave节点断开时间太久,repl_baklog中的offset已经被覆盖时什么时候执行增量同步?

2024-08-07 22:58:45 864

原创 Redis持久化RDB/AOF

RDB方式bgsave的基本流程?fork主进程得到一个子进程,共享内存空间子进程读取内存数据并写入新的RDB文件用新RDB文件替换旧的RDB文件RDB会在什么时候执行?save 60 1000代表什么含义?默认是服务停止时代表60秒内至少执行1000次修改则触发RDBRDB的缺点?RDB执行间隔时间长,两次RDB之间写入数据有丢失的风险fork子进程、压缩、写出RDB文件都比较耗时。

2024-08-07 20:41:24 675

原创 消息队列之RabbitMQ+SpringAMQP实现延时消息

RabbitMQ的消息过期是基于追溯方式来实现的,也就是说当一个消息的TTL到期以后不一定会被移除或投递到死信交换机,而是在消息恰好处于队首时才会被处理。当队列中消息堆积很多的时候,过期消息可能不会被按时处理,因此你设置的TTL时间不一定准确。

2024-08-07 19:59:28 743

原创 消息队列之RabbitMQ+SpringAMQP实现消息可靠性

每个只能配置一个,因此我们可以在配置类中统一设置。我们在publisher模块定义一个配置类:@Slf4j​@Overridelog.error("触发return callback,");});由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。具体来说,是在调用RabbitTemplate中的convertAndSend方法时,多传递一个参数:id:消息的唯一标示,MQ对不同的消息的回执以此做判断,避免混淆。

2024-08-07 18:32:11 582

原创 消息队列之RabbitMQ+SpringAMQP

publisher:生产者,也就是发送消息的一方consumer:消费者,也就是消费消息的一方queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue。

2024-08-07 18:02:14 934

原创 分布式事务之Seata实现

Seata的解决思路就是找一个统一的,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。大多数的分布式事务框架都是基于这个理论来实现的。维护全局和分支事务的状态,协调全局事务提交或回滚。定义全局事务的范围、开始全局事务、提交或回滚全局事务。管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。Seata的工作架构:其中,和可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来和。

2024-08-07 00:19:03 496

原创 分布式事务之Seata实现之四种事务模式

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。

2024-08-07 00:17:34 547

原创 微服务保护之Sentinel实现服务熔断

在上一篇文章,利用线程隔离对查询购物车业务进行隔离,保护了购物车服务的其它接口。由于查询商品的功能耗时较高(模拟500毫秒延时),再加上线程隔离限定了线程数为5,导致接口吞吐能力有限,最终QPS只有10左右。这就导致了几个问题:第一,超出的QPS上限的请求就只能抛出异常,从而导致购物车的查询失败。但从业务角度来说,即便没有查询到最新的商品信息,购物车也应该展示给用户,用户体验更好。也就是给查询失败设置一个逻辑。第二,由于查询商品的延迟较高(模拟的500ms),从而导致查询购物车的响应时间也变的很长。

2024-08-06 23:06:00 848

原创 微服务保护之Sentinel实现线程隔离

上一篇的限流可以降低服务器压力,尽量减少因并发流量引起的服务故障的概率。但并不能完全避免服务故障。一旦某个服务出现故障,我们必须隔离对这个服务的调用,避免发生雪崩。比如,查询购物车的时候需要查询商品,为了避免因商品查询出现故障,导致购物车服务级联失败,我们可以把购物车业务中查询商品的部分隔离起来,限制可用的线程资源:这样,即便商品服务出现故障,最多导致查询购物车业务故障,并且可用的线程资源也被限定在一定范围,不会导致整个购物车服务崩溃。

2024-08-06 22:55:14 274

原创 微服务保护之Sentinel实现限流

这样就把查询购物车列表这个簇点资源的流量限制在了每秒6个,也就是最大QPS为6。

2024-08-06 22:41:12 154

原创 微服务保护之Sentinel安装整合

1.下载jar包2.运行3.访问需要输入账号和密码,默认都是:sentinel。

2024-08-06 22:32:46 144

原创 远程调用OpenFeign的使用

因此我们通常会使用带有连接池的客户端来代替默认的HttpURLConnection。比如,我们使用OK Http.Feign底层发起http请求,依赖于其它的框架。有了上述信息,OpenFeign就可以利用动态代理帮我们实现这个方法,并且向。HttpURLConnection:默认实现,不支持连接池。这里只需要声明接口,无需实现方法。请求,携带ids为请求参数,并自动将返回值处理为。我们只需要直接调用这个方法,即可实现远程调用了。Apache HttpClient :支持连接池。OKHttp:支持连接池。

2024-08-06 21:06:42 316

原创 Nacos的安装部署、注册服务、发现服务、配置中心

1.操作控制面板在nacos控制台分别添加这些配置。

2024-08-06 20:39:07 625

原创 MyBatis无缝转MyBatis-plus+基本使用

在演示UpdateWrapper的案例中,我们在代码中编写了更新的SQL语句:这种写法在某些企业也是不允许的,因为SQL语句最好都维护在持久层,而不是业务层。就当前案例来说,由于条件是in语句,只能将SQL写在Mapper.xml文件,利用foreach来生成动态SQL。这实在是太麻烦了。假如查询条件更复杂,动态SQL的编写也会更加复杂。所以,MybatisPlus提供了自定义SQL功能,可以让我们利用Wrapper生成查询条件,再结合Mapper.xml编写SQL。

2024-08-06 17:47:05 1013

原创 【前端样式】点击复制指定内容

2.main.js中加入。

2024-07-29 13:59:11 100

原创 实现搜索框按下回车键触发方法

【代码】实现搜索框按下回车键触发方法。

2024-07-29 01:39:11 90

原创 Springboot集成Redis

启动。

2024-07-29 01:25:10 167

原创 使用Hutool实现类的转换

1.引入引入hutool工具类。

2024-07-28 19:57:49 124

原创 快速比较两个json相同的方法

2.字段数量是否一致。

2024-07-28 18:24:43 193

原创 【前端样式】相对父组件位置

【代码】【前端样式】相对父组件位置。

2024-07-28 17:07:22 95

原创 【前端样式】头像,鼠标悬浮变成黑色透明+提示字

showUploadDialog 在数据区定义,是上传头像的对话框。

2024-07-28 14:27:04 301

原创 前端布局Padding、Border、Margin、Position关系

属性设置内容的宽度和高度(注意,对于块级元素,分别设置上、右、下、左四个方向的内边距。分别设置上、右、下、左四个方向的外边距。意味着1像素宽、实线样式、黑色的边框。意味着上下左右都是10像素的内边距。边框是紧接内边距并围绕在内容周围的线。这是元素本身的文本、图片或其他内容。一次性设置四个方向的内边距,例如。Padding(内边距,绿色区域)内边距是内容区域与边框之间的空间。分别设置边框的宽度、样式和颜色。外边距是边框与其他元素之间的空间。Margin(外边距,橙色区域)一次性设置四个方向的外边距。

2024-07-28 14:20:29 236

原创 【前端样式】自定义滚动条

【代码】【前端样式】自定义滚动条。

2024-07-28 14:16:38 235

原创 Mybatis-Plus无法识别数据库字段UId

比如uid,本身是user id的缩写,使用驼峰命名要注意不能写成UId,会无法识别。要改成UserId,其它情况同理。

2024-07-28 14:13:47 325

原创 【前端样式】仿B站视频封面效果

【代码】【前端样式】仿B站视频封面效果。

2024-07-28 14:03:46 246

原创 vue动态路由防止页面自跳转思路

这个方法的原本作用是跳转到User页面,并附带路由参数加入判断后,防止自跳转。

2024-07-28 13:59:11 136

原创 vue实现不同页面数据传递——路径参数

在这个例子中,:id是一个动态路径参数,它表示URL中/user/之后的部分应该被捕获为一个名为id的参数。

2024-07-28 13:53:13 148

原创 ElementUI+Vue+Springboot实现文件上传之——阿里云OSS存储

在config包下新建CorsConfig。加入自定义bean依赖。

2024-07-27 20:25:14 175

原创 ElementUI+Vue+Springboot实现文件上传之——本地存储

本文要解决的是服务器接受前端上传的文件,并存储在服务器的方案。

2024-07-27 19:10:59 113

原创 Linux环境下部署Nginx+vue

Linux环境,使用nginx,部署vue应用

2024-07-26 18:25:03 437

原创 用户登录入门:基于springboot拦截器过滤器+jwt

用户登录入门

2024-06-17 21:29:19 239

原创 windows环境下配置mysql

mysql入门

2024-06-17 20:54:27 270

原创 Vue2封装request请求

Vue2入门

2024-06-17 20:33:59 240

空空如也

空空如也

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

TA关注的人

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