自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 七天学会SpringCloud分布式微服务——06——Sentinel

Sentinel是Alibaba开发的轻量级微服务防护框架,主要提供流量控制、熔断降级和实时监控功能。其核心机制包括:定义资源(如API接口),设置流量规则(QPS限制),在请求超限时进行流量阻断或熔断保护。通过Dashboard可实现实时监控和动态调整规则。配置时需在微服务中设置Sentinel端口,并使用注解标记受保护资源。当触发限流规则时,可通过异常处理返回JSON提示信息。Sentinel通过热点规则、授权规则等多维度策略,有效保障微服务在高并发场景下的稳定性。

2025-06-30 22:09:26 537

原创 七天学会SpringCloud分布式微服务——05——OpenFeign

本文介绍了OpenFeign实现远程调用的详细步骤与配置方法。首先在pom引入依赖,创建FeignClient接口并配置请求映射。随后讲解了OpenFeign的日志实现、超时控制(默认10s连接、60s读取)、重试机制配置(间隔时间与最大次数)。文章还展示了如何配置请求拦截器添加请求头信息,以及通过Sentinel实现Fallback回调机制,在服务调用失败时返回兜底数据。最后需要在yml中开启Sentinel功能来支持熔断。全文涵盖了OpenFeign的核心功能配置,帮助开发者实现可靠的微服务间调用。

2025-06-30 16:21:09 477

原创 七天学会SpringCloud分布式微服务——04——Nacos配置中心

本文介绍了Nacos配置中心的动态刷新与数据隔离功能。主要内容包括:1)当Nacos与本地配置冲突时,Nacos配置优先生效;2)通过配置类绑定实现配置动态刷新,无需重启服务;3)使用监听器实时获取配置变更;4)通过命名空间实现多环境隔离,通过Group区分不同微服务。文章提供了具体实现步骤,包括依赖引入、配置绑定、监听器编写等关键代码示例,帮助开发者快速掌握Nacos配置中心的核心功能。

2025-06-27 14:45:16 706

原创 七天学会SpringCloud分布式微服务——03——Nacos远程调用

本文摘要: 微服务配置分类:通用配置放公共模块(common/config),专属配置放各自服务模块,基础服务配置放对应模块。 Nacos宕机影响:已调用过的服务仍可用,未调用过的不可用。 远程调用方式: 基础方式:通过DiscoveryClient获取实例,用RestTemplate调用。 负载均衡:引入LoadBalancerClient动态选择实例。 注解简化:使用@LoadBalanced修饰RestTemplate,直接通过服务名调用(推荐)。 核心原则:分层配置确保复用与隔离,负载均衡提升调用可

2025-06-26 22:57:40 299

原创 七天学会SpringCloud分布式微服务——02——第一个微服务项目

普通java就可以,不用选springboot,因为父工程已经已经是springboot项目了,子工程也是了,根本原因就是上面这段!在service-product这个具体微服务模块下的pom文件下引入真正的依赖包。去掉依赖引入,因为是父工程,在具体的子项目引入真正的依赖。先在services pom文件下引入依赖。前提是安装Nacos,本地运行起来!可以删除services下的src。完整的父工程pom.xml文件为。最终是这样的,删除无关文件。

2025-06-26 15:03:02 1209 1

原创 七天学会SpringCloud分布式微服务——01——基础概念

就是一个微服务失效(例如:卡顿),引发其他微服务(调用了失效的服务)卡顿,在高并发情况下,导致全部服务器资源耗尽。配置中心 :统一管理所有配置修改,避免每台服务器中相同的微服务有不同的配置信息。就是一种快速失败机制,当服务调用次数超过一定次数后,依旧不可用,直接返回。分布式事务: 涉及到不同数据库保证原子性,例如去库存与下订单。扩容、缩容、负载均衡。

2025-06-24 21:50:17 467

原创 理解RocketMQ顺序消息的全局有序消息和分区有序消息、延迟消息、事务消息

类型顺序粒度队列数并发性吞吐量使用场景全局有序所有消息1差低极端顺序要求(交易流水)分区有序每个分区内有序多好高订单系统、用户行为日志等当消息写入到Broker后,在指定的时长后才可被消费处理的消息,称为延时消息。从 RocketMQ 的存储核心结构 ——的角度,来通俗解释延时消息的整个生命周期,会让你更深入理解它是怎么“绕一圈”实现的。

2025-06-18 17:23:27 1049

原创 RocketMQ深入理解原理,工作流程细节

Producer可以将写入到中的producer发送消息前要知道往哪个topic中投递,进而向nameserver要这个topic的路由信息表一个。

2025-06-10 18:13:35 969

原创 RocketMQ基础命令

本文简要介绍了RocketMQ的基本操作流程,包括启动NameServer和Broker、查看集群状态、生产/消费消息以及关闭服务的命令步骤。同时提供了处理端口占用问题的方法(通过lsof和kill命令),并介绍了RocketMQ可视化面板的安装与配置过程(修改端口为7000后通过mvn打包运行)。最后展示了如何通过浏览器访问localhost:7000查看可视化监控界面。全文以命令行操作为主,涵盖RocketMQ核心组件的全生命周期管理。

2025-06-09 14:15:14 320

原创 RocketMQ基础概念的理解

和之间存在关系。一个生产者可以向多个主题发送消息,一个主题可以接收来自多个生产者的消息。这种多对多关系有助于提高性能扩展和灾难恢复能力。

2025-06-05 22:59:43 325

原创 黑马点评项目03——优惠券秒杀引来的血案(超卖问题,一人一单解决)分布式锁,Lua脚本

为了保证顾客下单订单号唯一性以及不暴露给顾客一些敏感信息(例如:第几个下单的),所以不能采用单纯自增的方式。这里采用redis自增id策略,id为时间戳+计数器。需要说明的是 在redis保存的key+计数器,key是(当天下单时间),id是当前时间戳-设定的起始时间戳+自增count,一起合成id,这是代码。

2025-06-05 19:08:04 1736

原创 黑马点评项目02——商户查询缓存(缓存穿透、缓存雪崩、缓存击穿)以及细节

缓存一致性、缓存穿透、缓存击穿

2025-05-29 20:25:04 1396

原创 mybatis-plus实现增删改查(新手理解版)

脚手架使用的springboot3.3.12 +依赖 myql驱动,手动加入mybatisplus 和 lombok依赖。一个小细节:自己加的第三方库,未在父项目或 dependencyManagement 中定义版本,要加版本号。QueryWrapper 扩展了AbstractWrappe功能,可以指定查找哪些字段。也有增删改查,不过它比userMapper优点支持批量化操作,更加丰富,常规就够用了。调用baseMapper.XXX(Wrapper对象)在serviceImpl类中直接用。

2025-05-28 23:11:34 1097

原创 黑马点评项目01——短信登录以及登录校验的细节

本文介绍了两种短信登录实现方式: Session方式: 通过session存储验证码和用户信息 使用ThreadLocal保存用户信息实现拦截器校验 缺点是不适合分布式环境 Redis方式: 使用Redis存储验证码和用户信息 验证码设置3分钟有效期 使用UUID生成token作为Redis键 通过请求头携带token进行登录校验 两种方式对比了实现细节,Redis方案解决了Session在分布式环境中的共享问题,更适合现代应用架构。文中还解释了RedisTemplate和StringRedisTempla

2025-05-27 21:20:45 1248

原创 Redis-黑马点评项目-08-用Redis的Zset集合实现点赞按时间排行功能(类似于朋友圈)报栈溢出错误

修改版本pom.xml文件parent版本。

2025-05-26 16:05:06 385

原创 Redis-黑马点评项目-07-jmeter测试-200个线程抢购100个秒杀券超卖问题

在高并发场景下,秒杀系统容易出现超卖问题。本文通过Java代码展示了如何利用乐观锁(CAS)解决这一问题。代码中,通过判断库存是否大于0来确保库存扣减的原子性,避免超卖。同时,使用Redis生成全局唯一订单ID,确保订单的唯一性。在测试过程中,通过JMeter模拟高并发场景,发现数据库中的库存已全部售出,但测试结果未达到预期。通过清理缓存和添加响应断言,最终验证了系统的正确性。最终效果图显示,系统在高并发下能够正确处理库存扣减和订单生成,解决了超卖问题。

2025-05-22 16:53:37 313

原创 Redis-黑马点评项目-06-jmeter测试-200个线程抢购秒杀券全部报错401问题

在性能测试中,200个线程报错401,表明请求未授权。问题出在路径/voucher-order/seckill/22需要登录验证,而测试工具JMeter未携带有效的token。解决方法是获取有效的token(HASH码),并在JMeter中添加一个Http信息头管理器,将token以键authorization的形式放入。这样,JMeter在发送请求时会携带授权信息,从而避免401错误。

2025-05-22 14:57:23 247

原创 Redis-黑马点评项目-05-postman测试-新增优惠券报错以及前端展示优惠劵报错NaN问题

在使用Postman向数据库添加优惠券信息时,遇到了JSON解析错误。错误信息显示,beginTime字段的当前令牌(VALUE_STRING)不是数字,无法使用数字值访问器。原因是JacksonConfig.java中配置了从JSON中读取时间戳(毫秒值),而原始请求体中传递的是日期字符串"2022-01-26T10:09:17"。

2025-05-21 21:31:28 644

原创 Redis-黑马点评项目-04-使用逻辑过期来解决缓存击穿问题

在高并发环境下,只查了一次数据库,而且我们故意修改的是,数据库和redis数据不一样,这样过期了,就会有一个线程去修改,也只能由一个修改,谁拿到了锁就修改呗,也就是查数据库,写回到redis,其他线程,在修改之前查询返回的是旧数据,可能会出现短时间数据不一致问题。以防有一个线程完成缓存重建,刚刚释放完lock,另外一个线程拿到lock,再判断一下是否完成有没有这个key,若有,就判断是否到期,没到期就会直接返回,2次返回前都是先执行的finally,保证锁被释放。无法解析符号 ‘zset’

2025-05-20 22:54:08 800

原创 Redis-黑马点评项目-03-使用RedisSETNX模拟锁来解决缓存击穿问题

本文介绍了一种基于Redis的分布式锁方案,结合布隆过滤器解决缓存穿透问题。方案的核心是通过Redis的SETNX命令实现分布式锁,确保在高并发场景下,只有一个线程能够访问数据库,避免缓存击穿。同时,利用布隆过滤器预先判断数据是否存在,防止无效请求穿透缓存直接访问数据库。代码实现中,首先通过布隆过滤器判断请求的ID是否存在,若不存在则直接返回错误。若存在,则尝试从Redis缓存中获取数据,若缓存未命中,则尝试加锁并查询数据库。查询成功后,将结果写入缓存并释放锁。通过该方案,可以有效提升系统的并发处理能力和缓

2025-05-19 23:21:10 160

原创 Redis-黑马点评项目-02-使用布隆过滤器来解决缓存穿透问题

本文介绍了如何通过Redisson实现布隆过滤器来优化查询性能,避免缓存穿透问题。首先,在pom.xml中引入Redisson依赖,然后编写配置类注册RedissonClient对象。接着,实现布隆过滤器类,将所有店铺ID加载到布隆过滤器中。在查询时,通过布隆过滤器拦截无效的店铺ID,避免直接查询数据库。最后,文章提到需要动态更新布隆过滤器以应对店铺ID的增删操作,并展示了拦截效果图。通过这种方式,可以有效提升系统性能并减少不必要的数据库查询。

2025-05-19 20:31:59 570

原创 Redis-黑马点评项目-01-postman测试-时间戳-localDate序列化问题

安装postman后发送请求地址和请求体中,采用 RestFul 风格,修改采用putIDEA报错:原来是Jackson无法将时间戳转换为LocalDateTime 类型数据。

2025-05-19 17:02:54 498

原创 IDEA 中github首次使用细节

因为要用开启了代理模式(魔法)来访问github,所以要修改git提交的端口号,弄了一个脚本文件,使用后开启代理端口号,报错消失,访问完可以恢复。

2025-05-10 22:07:02 226

原创 springboot开发请求路径常用的

/api/**/log是错的,不能这样写,它必须出现在最后位置上。

2025-05-08 22:41:41 85

原创 springboot3中webjars静态资源的访问细节

访问路径必须是/webjar/** 这是规定的。

2025-05-08 21:26:57 125

原创 请求头中的accept属性

代表希望得到的返回类型时html。

2025-05-08 19:22:22 261

原创 springboot3日志管理细节

springboot3日志管理

2025-05-07 16:09:16 329

原创 MySQL查询一些隐秘细节

为什么呢,因为 id 是 int类型,MySQL识别到 ‘1’ 时,自动转为int 1。

2025-04-23 23:01:06 113

原创 MyBatis之动态生成类

MyBatis底层使用的就是Javassist,在内存中生成class文件,然后就不用写dao层的实现类了。也把这个放到环境变量中,就不会报错了。

2025-04-22 21:36:04 408

原创 List<int[]> 怎么转换成 int[][] 以及拓展

注意:0是占位符,JVM会根据自动变为list.size()

2025-04-21 12:04:14 228

原创 MyBatis事务管理与jdbc事务管理代码对照关系

具体对照关系,写在了代码里面,MyBatis采用JDBC事务管理方式时,实际上底层封装JDBC事务管理机制。

2025-04-17 12:37:58 179

原创 pojo类中为什么推荐使用包装类

2025-04-16 23:06:41 98

原创 包装类中的字符串转换API对比

Double.parseDouble() 转的是普通double 类型。Double.valueOf() 转的是包装类。:都是字符串转数字类型。

2025-04-16 22:48:41 93

原创 Maven建立web项目心得

maven web 项目

2025-04-16 21:46:14 345

原创 Spring八股(完结,后续遇到新问题会补充)

spring 8股

2025-04-16 13:24:31 468

原创 MyBatias系列之Bug01

mybatis bug系列

2025-04-15 16:34:12 211

原创 LeetCode100题持续更新中

LeetCodeHot100题,持续更新中

2025-04-15 10:00:28 1067 2

空空如也

空空如也

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

TA关注的人

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