- 博客(88)
- 收藏
- 关注
原创 MongoDB,入门看这一篇足矣!
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的一款高性能的 NoSQL 数据库。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。其中的文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组,数据结构的支持非常灵活!的确,在使用的过程当中,正如所介绍的,数据的存储和查询,性能极快,而且很好的满足我们的需求!话不多说,下面我们就一起来了解一下,这款数据库应该如何使用!
2024-02-06 09:30:59 859
原创 关于Java中@Component的使用中出现@Autowired为NULL的问题
这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的时候,因为@Autowired是在这个bean之中的,此时@Autowired还未完成自动装载,所以导致依赖注入的service为null。在@Component注解的类下,再使用了@Resource或@Autowired注解。如此操作会导致依赖注入失败。今天在写一个自定义工具类的时候发现一个问题,就是@Component的使用中出现@Autowired为NULL,
2024-01-18 14:51:35 1366 1
原创 熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握
在探讨高可用架构之前,让我们以 O2 系统为例,解释一下何谓可用性。O2 是腾讯内部的一个广告投放系统,专注于提升投放效率、分析广告效果,拥有自动化广告投放、AIGC 自动化素材生产等多种功能。其整体架构概览如下:一个完善的架构应该具备3个能力,也就是身体的“三高”:高性能;高可用;易扩展。
2024-01-02 15:23:38 1294
原创 如何使用Redis实现抢红包功能
在这篇文章中,我们将探讨如何使用Redis来设计和实现一个抢红包的业务场景。从业务场景、需求分析、技术选型、代码实现,痛点问题等进行多维分析和思考。
2023-12-29 10:12:40 1131
原创 超过1000w条数据,MySQL查询越来越慢?四种方案帮你解决!
拿 limit 10000, 10 这条语句来说明一下, MySQL在执行这条查询的时候,需要查询 10010 (10000 + 10) 条记录,然后只返回最后 10 条,并将前面的 10000 条记录抛弃,这样当翻页越靠后时,代价就变得越来越高。这是因为查询时 MySQL 并不是跳过 OFFSET 行,而是取 OFFSET+N 行,然后放弃前 OFFSET 行,最后返回 N 行,当 OFFSET 特别大的时候,效率就非常的低下。先在索引树中找到开始位置的 id 值,再根据找到的 id 值查询行数据。
2023-12-28 18:33:04 967
原创 SpringBoot 中实现订单30分钟自动取消的策略
在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例代码。以上三种方案都可以实现订单在30分钟内未支付则自动取消的需求。根据实际业务需求、系统负载和其他因素,可以选择最适合自己系统的实现方案。每种方案都有其优缺点,需要根据具体情况权衡。
2023-12-28 17:14:35 864
原创 600条最强Linux命令总结,只看这一篇就够用了
7、mkdir -p dir1/dir2:在当前目录下创建 dir1 目录,并在 dir1 目录下创建 dir2 目录, 也就是连续创建两个目录(dir1/和 dir1/dir2)vim 启动后,默认进入命令模式,任何模式都可以通过 esc 键回到命令模式(可以多按几次),命令模式下可以键入不同的命令完成选择、复制、粘贴、撤销等操作。欢迎关注我们,公号终码一生。
2023-12-26 10:43:09 1007
原创 Spring如何解决循环依赖
我们在介绍中《Spring中Bean的生命周期》一文中发现了一个方法:addSingletonFactory(),它是处理Spring中的循环依赖问题的。在那里我们没有具体详讲,主要是想单独的开一个循环依赖章节,来具体说明。了解循环依赖前,我们先来聊一个概念:Spring的三级缓存:一级缓存,存放已经经历了完整生命周期的bean对象:二级缓存,存放原始的bean对象(尚未填充属性):三级缓存,存放bean工厂对象。
2023-12-26 10:08:01 952
原创 Spring中Bean的生命周期
你有了解Spring中Bean的生命周期吗?可能大多数的人给我一样,对于Spring本身知之甚少。我们仅限于在工作中如何使用Spring的Bean,使用起来Bean 是如何如何好用?但是我们好像很少去思考它都做了些什么?当然学习是一个漫长且持久的过程,我们只能一点点积累,从而积少成多。本章节主要来学习下Spring中Bean的生命周期。
2023-12-25 16:42:03 957
原创 Springboot实现ModbusTCP通信
Modbus官网 Modbus协议 Modbus技术资源 MODBUS TCP / IP 关于Java的开源库Jamod:Java Modbus实现:Java Modbus库。该库由Dieter Wimberger实施。ModbusPal:ModbusPal是一个正在进行的Java项目,用于创建逼真的Modbus从站模拟器。由于预定义的数学函数和/或Python脚本,寄存器值是动态生成的。ModbusPal依赖于RxTx进行串行通信,而Jython则依赖于脚本支持。
2023-12-25 15:36:29 2117
原创 Spring Boot整合MyBatis-Plus框架快速上手
MyBatis-Plus官网地址:MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MP的愿景是成为MyBatis最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。
2023-12-25 13:34:18 1382 1
原创 Java 的 8 种异步实现方式,让性能炸裂起来
异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:「发送短信、邮件、异步更新等」 ,这些都是典型的可以通过异步实现的场景。首先我们先看一个常见的用户下单的场景:在同步操作中,我们执行到 「发送短信」 的时候,我们必须等待这个方法彻底执行完才能执行 「赠送积分」 这个操作,如果 「赠送积分」 这个动作执行时间较长,发送短信需要等待,这就是典型的同步场景。
2023-12-22 17:00:35 1159
原创 Win系统安装MYSQL5.6安装版和5.7解压版
依次点开“MySQL Servers”、“MySQL Servers”、“MySQL Servers 5.6”、“MySQL Servers 5.6.21 -64”,然后点击绿色箭头将选中的版本移植到右边选中框中。上一步完成之后,别着急点next,先选中“MySQL Server 5.6.21” ,之后点击下方的蓝色“Advanced Options”,这样就能自定义mysql的安装位置跟数据存储位置了;点击OK,如果刚才你设置的路径是存在的,会提示路径已存在,是否继续,点击继续就行。
2023-12-21 22:03:01 1353
原创 JVM知识总结,一定要记住它。
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为「Stop The World」。也简称为STW。
2023-12-21 18:21:26 393
原创 Spring Security:从入门到精通,全方位指南
我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity的异常处理机制。在SpringSecurity中,如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。
2023-12-21 16:36:55 744
原创 Spring Boot 集成 ElasticSearch:实现模糊查询、批量 CRUD、排序、分页和高亮功能
1.大致流程创建对应的请求 --> 设置请求(添加规则,添加数据等) --> 执行对应的方法(传入请求,默认请求选项)–> 接收响应结果(执行方法返回值)–> 输出响应结果中需要的数据(source,status等)2.注意事项如果不指定id,会自动生成一个随机id正常情况下,不应该这样使用new IndexRequest(“ljx777”),如果索引发生改变了,那么代码都需要修改,可以定义一个枚举类或者一个专门存放常量的类,将变量用final static等进行修饰,并指定索引值。
2023-12-20 11:17:53 1041
原创 分布式全局唯一ID生成方案(附源码)
ID,全称Identifier,中文翻译为标识符,是用来唯一标识对象或记录的符号。比如我们每个人都有自己的身份证号,这个就是我们的标识符,有了这个唯一标识,就能快速识别出每一个人。在计算机世界里,复杂的分布式系统中,经常需要对大量的数据、消息、HTTP 请求等进行唯一标识。比如对于分微服务架构的系统中,服务间相互调用需要唯一标识,幂等处理,调用链路分析,日志追踪的时候都需要使用这个唯一标识,此时我们的系统就迫切的需要一个全局唯一的ID。
2023-12-20 09:04:02 1149
原创 JAVA基础编程练习题(下)
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
2023-12-19 16:37:09 937
原创 JAVA基础编程练习题(上)
60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
2023-12-19 16:28:06 920
原创 第十三章 SpringCloud Alibaba 实现 Seata--分布式事务
2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit AndRollback),其愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。后来更名为 Seata,意为:Simple Extensible AutonomousTransaction Architecture,是一套分布式事务解决方案。
2023-12-18 16:23:24 1382
原创 第十二章 SpringCloud Alibaba 实现 Nacos Config--服务配置
配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护,这比较困难。配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。基于上面这些问题,我们就需要配置中心。
2023-12-18 15:18:38 1159
原创 Spring 中经典的 9 种设计模式,一定要牢记!
Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。实现原理:读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中,保存在它的一个ConcurrentHashMap中。
2023-12-18 14:54:59 1106
原创 SpringBoot+Redis 10分钟搞定海量重复提交问题
任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据。2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token。
2023-12-16 18:21:37 874
原创 第十一章 SpringCloud Alibaba 实现Rocketmq–消息驱动
MQ(Message Queue)是一种跨进程的通信机制,用于传递消息。通俗点说,就是一个先进先出的数据结构。
2023-12-16 14:57:25 1075
原创 在项目中,如何应对高并发流量
流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+…。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那么这个量就可以称之为大流量了。
2023-12-16 09:22:35 953
原创 在 Spring Boot 中发送邮件简单实现
这可能有一些不够灵活,你也可以把邮箱信息存储在数据库或者其他地方,随时可以通过管理后台进行维护、修改,而不需要重启应用。通过这个 starter,只需要简单的几行配置就可以在 Spring Boot 中实现邮件发送,可用于发送验证码、账户激活等等业务场景。如上,每次发送邮件都先从数据库中检索邮箱服务器的配置,然后构建 JavaMailSenderImpl 实例执行邮件发送。成功收件,注意 World 文本是加粗的,因为发送的是 HTML 邮件,并且使用了 strong 标签。执行测试,发送邮件。
2023-12-15 17:58:31 1391
原创 第十章 SpringCloud Alibaba 实现Sleuth–链路追踪
在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心,也就意味着这种架构形式也会存在一些问如何快速发现问题?如何判断故障影响范围?如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划?
2023-12-15 17:50:10 1421
原创 第九章 SpringCloud Alibaba 实现 Gateway–服务网关
大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题:客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性认证复杂,每个服务都需要独立认证。存在跨域请求,在一定场景下处理相对复杂。上面的这些问题可以借助API网关来解决。所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服。
2023-12-14 17:43:57 1257
原创 SpringBoot 接口实现幂等性,实现的四种方案!
在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。幂等性是开发当中很常见也很重要的一个需求,尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。对于下单等存在唯一主键的,可以使用“唯一主键方案”的方式实现。
2023-12-13 14:34:28 1063
原创 第七章 SpringCloud Alibaba 实现微服务集成Sentinel
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制熔断降级系统负载保护等多个维度来保护服务的稳定性。Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不用应用等。完备的实时监控:Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒。
2023-12-12 15:04:32 2172
原创 第六章 SpringCloud Alibaba Sentinel–服务容错
在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会 出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。
2023-12-12 09:00:00 1246
原创 SpringBoot+Netty+Websocket实现消息推送
这样一个需求:把设备异常的状态每10秒推送到页面并且以弹窗弹出来,这个时候用Websocket最为合适。
2023-12-11 15:16:05 1018 1
原创 第五章 SpringCloud Alibaba 实现Feign服务调用的负载均衡
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。
2023-12-11 10:49:47 608
原创 第四章 SpringCloud Alibaba 实现Ribbon负载均衡
通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡,而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。我们在微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定服务由哪个提供者执行。
2023-12-07 15:23:00 1330
原创 第三章 SpringCloud Alibaba Nacos Discovery--服务治理
先来思考一个问题通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址(ip,端口)等硬编码到了代码中,这种做法存在许多问题:一旦服务提供者地址变化,就需要手工修改代码一旦是多个服务提供者,无法实现负载均衡功能一旦服务变得越来越多,人工维护调用关系困难那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现服务治理。什么是服务治理服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。服务注册。
2023-12-07 11:14:49 1523
原创 第一章 SpringCloud Alibaba 微服务架构
微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
2023-12-06 18:38:23 1005
原创 SpringBoot+WebSocket实时监控异常
此异常非彼异常,标题所说的异常是业务上的异常。最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。因为需要服务端主动向客户端发送消息,所以很容易的就想到了用WebSocket来实现这一功能。WebSocket就不做介绍了,上链接:前端略微复杂,需要在一张位置分布图上进行鼠标描点定位各个设备和根据不同屏幕大小渲染,本文不做介绍,只是简单地用页面样式进行效果呈现。
2023-12-06 13:59:08 550
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人