- 博客(118)
- 收藏
- 关注
原创 Java并发包中的锁升级
当有第二个线程尝试获取已被偏向的锁时,偏向锁会升级为轻量级锁。:如果轻量级锁下的多个线程争用同一个锁导致CAS失败(即自旋操作达到一定次数后),锁会进一步升级为重量级锁,这时会涉及到操作系统层面的互斥锁(mutex),线程会被阻塞和唤醒,开销较大。关键字的实现中,锁的升级通常涉及到从无锁状态到偏向锁、再升级到轻量级锁,最后可能升级到重量级锁的过程。这一系列过程是为了减少锁带来的开销,提高并发效率。:大多数情况下,锁会偏向于第一个获得它的线程,之后此线程再次请求锁时,无需进行同步操作,直接访问。
2024-06-06 20:01:58
240
原创 用openFeign编码器统一返回值
默认的编码器它仅能处理String类型、[byte]类型,显然是很难使用的,因为我们经常会在请求参数中放入对象。
2024-05-30 14:42:23
583
原创 Feign 和 OpenFeign 的区别
OpenFeign是Spring Cloud团队在Feign基础上进行的扩展和封装,因此它更好地融入了Spring Cloud生态系统,特别是在Spring Boot 2.0及以上版本中得到了广泛的应用。结论是,如果你正在使用Spring Cloud构建微服务架构,建议使用OpenFeign,因为它提供了更好的集成和更多的配置选项,且得到活跃的维护和支持。如果你的项目还在使用较早版本的Spring Cloud,可能需要考虑使用Feign,但应注意Feign可能不会获得未来的更新和维护。
2024-05-06 17:12:23
1134
原创 SpringBoot项目启动,传参有哪些方式?
直接在启动 Spring Boot 应用的命令行中使用--后跟参数名和值的方式来传递参数。记住:一般是对于Spring Boot应用特有的配置参数,确保它们遵循Spring Boot的配置属性命名规则,这样才能被正确解析。
2024-04-24 15:02:59
822
原创 Ribbon负载均衡器
在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(比如Nginx,openResty)如Nginx ,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端在进行负载均衡算法分配。
2024-04-23 20:58:42
516
原创 使用nacos的好处
使用docker 发布项目时,如果要修改配置文件就要重新打包发布比较麻烦,但用nacos远程配置后,不需要重新打包发布,就可以修改配置文件,减少了重新发布所消耗的时间,提高了效率。Nacos支持用户认证和授权,允许细粒度的访问控制,确保配置数据的安全性。通过Namespace和Group机制,可以实现不同环境或部门间配置的隔离。Nacos支持集群部署,确保了配置和服务发现的高可用性。
2024-04-23 20:39:31
553
原创 Nacos配置中心动态刷新原理
pull模式:主动拉去配置,通过固定的时间间隔。缺点:频繁请求,时效性不高,时间间隔不好设置。 push模式:服务端检测到变化,主动将新配置推送给客户端,时效性高,但是占用服务端的资源,服务端需要消耗大量的资源去维护和客户端之间的心跳。 nacos模式:客户端间隔10毫秒请求一次服务端,通过在请求头中携带长轮询的超时时间,默认30秒,服务端在接收到客户端的请求后,会将其挂起一段时间(30秒),在这30秒中,如果配置有变化,服务端就立即将配置相应给客户端,如果没有变化,30秒后客户端会再次请求。主要是通过
2024-04-23 20:14:34
635
原创 微服务演进史
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发微服务架构的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发微服务架构。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。官方网址: Spring Cloud Alibaba。
2024-04-23 14:48:05
993
原创 Nacos
官方:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。集 注册中心+配置中心+服务管理 平台Nacos 的关键特性包括:服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理。
2024-04-22 21:33:56
551
原创 面试题
在日志记录领域,尤其是使用如log4j、logback等日志框架时,MDC是一种辅助多线程环境下日志追踪和关联的技术。其原理是在每个线程的上下文中维护一个键值对映射表,用于存储与该线程执行上下文相关的特定信息(如用户ID、事务ID、请求ID等)。当线程在执行过程中生成日志时,MDC中的信息可以自动附加到日志条目中,无需在代码中手动传递这些上下文信息。
2024-04-22 21:26:43
1127
原创 如何处理项目日志
Elasticsearch 是一个基于 Apache Lucene 构建的分布式、实时搜索与分析引擎。它能够索引、搜索和分析大量数据,并且提供了水平扩展能力,允许处理 PB 级别的数据。Elasticsearch 适合用于全文搜索、日志分析、监控指标聚合等多种场景,其 RESTful API 让数据的索引和查询变得非常便捷。Logstash 是一个动态数据收集管道,用于从各种数据源接收、解析、转换并将数据发送到“stash”(例如 Elasticsearch)。
2024-04-22 21:12:10
358
原创 MongoDB 与MySQL的区别?优势?
MongoDB 与 MySQL 是两种不同类型的数据库管理系统,它们各自有独特的数据模型、查询语言、扩展方式以及适用场景。
2024-04-22 20:31:24
2598
2
原创 MDC搭配ttl
MDC 介绍 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。对于一个 Web 应用来说,通常是在请求被处理的最保存这些数据。
2024-04-20 10:12:12
608
原创 SpringBoot集成RockerMQ
RocketMQ支持指定级别的延迟消息,即只能设置预设的几个时间等级的延迟,而不是任意时间延迟。目前RocketMQ社区版并不支持任意时间的精确延迟,RocketMQ在4.x版本只能够支持18种内置的延迟消息(1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h),具体实现方式是在发送消息时设置消息的延迟等级。
2024-04-11 20:48:30
309
1
原创 在服务器部署MySQL
其中my.cnf 内容如下2.启动数据库3.校验是否开启成功DML与DDLMySQL中,DML(Data Manipulation Language)和DDL(Data Definition Language)是两种不同类型的SQL语句,它们分别用于不同的数据库操作目的:DML(数据操作语言): DML语句主要用于对数据库表中的实际数据进行操作,主要包括以下几种命令::向表中插入新的行数据。:更新表中已存在的行数据。:从表中删除满足特定条件的行数据。:从表中检索数据,虽然不
2024-04-10 21:05:36
999
原创 Rabbitmq怎么保证消息的可靠性?
为保证消息可靠性,可以设置autoAck=false,使得消费者在处理完消息后手动发送确认(basicAck)。开启confirm回调模式后,RabbitMQ会在消息成功写入到磁盘并至少被一个交换器接受后,向生产者发送一个确认(acknowledgement)。当消息不能被正常消费时(比如达到最大重试次数),可以通过设置TTL(Time To Live)或者死信交换器(Dead Letter Exchange)将消息路由至死信队列,从而有机会后续分析和处理这些无法正常消费的消息。
2024-04-09 21:26:28
870
原创 生产端消息可靠性保证: 确认(Confirm)机制
PostConstruct注解是Java EE规范中的一部分,主要用于标记在一个Bean初始化完成后需要执行的方法。这个注解由JSR-250定义,并且在Spring框架以及其他遵循Java EE标准的应用服务器中广泛支持。当容器完成对Bean的实例化并且所有依赖注入完成后,将会自动调用标有注解的方法。这为开发者提供了一个机会,在对象正式投入使用之前进行一些必要的初始化工作,比如初始化资源、预计算某些值、启动后台任务等增强。
2024-04-09 21:24:09
453
原创 延迟 队列
该种方式可以创建一个承载不同超时时间消息的消息队列,但是这种方式有一个问题,如果消息队列中排在前面的消息没有到超时时间,即使后面的消息到了超时时间,先到超时时间的消息也不会进入死信队列,而是先检查排在最前面的消息队列是否到了超时时间,如果到了超时时间才会继续检查后面的消息。上述实现方式中,ttl延时队列中所有的消息超时时间都是一样的,如果不同消息想设置不一样的超时时间,就需要建立多个不同超时时间的消息队列,比较麻烦,且不利于维护。17:30 延迟时间: 13*30 * 60 * 1000。
2024-04-09 19:30:57
1576
原创 MQ死信队列
在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。死信就是消息在特定场景下的一种表现形式,这些场景包括:1. 消息被拒绝访问,即 RabbitMQ返回 basicNack 的信号时 或者拒绝basicReject2.消费者发生异常超过重试次数。其实spring框架调用的就是basicNack3.消息的Expiration过期时长或队列TTL过期时间。4. 消息队列达到最大容量上述场景经常产生死信,即消息在这些场景中时,被称为死信。
2024-04-09 14:23:09
615
原创 MQ应答模式
如果消费者在处理消息前断开了连接,或者在处理消息期间抛出了未捕获的异常,RabbitMQ会认为消息未被正确处理,从而重新排队消息,确保消息至少会被消费一次(at least once delivery)。采用手动应答可以提高消息的可靠性,即使消费者在处理消息过程中出现问题,只要未发送ack确认,RabbitMQ会在重新连接后再次将消息发送给该消费者。不在乎消费者对消息处理是否成功,都会告诉队列删除消息。方法来确认消息处理完成,RabbitMQ只有在接收到消费者的确认后才会将消息从队列中删除。
2024-04-08 19:56:40
1030
原创 什么是MQ ?为什么用MQ?
MQ(message queue)(消息队列),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。
2024-04-07 20:44:35
6535
原创 Redis 和 Mysql 数据库数据如何保持一致性
我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力,但是当更新数据库时,如何保证缓存及数据库一致性,一般我们采用延时双删策略。目前系统中常用的做法是一个查询接口,先查询Redis,如果不存在则查询数据库,并将结果放入到Redis中。为什么是删除缓存,而不是更新缓存呢?主要是如果缓存的内容是带有树型结构或者List,Map,那么更新其中一个内容相对较慢。本文所讲操作,均是按照如果缓存不存在,查询数据库后,再放入Redis。
2024-03-30 15:03:59
540
原创 Redis主从同步机制和Redis集群
Sentinel是Redis提供的一个高可用性解决方案,它能监控主从节点状态,并在主节点出现故障时自动完成故障转移。当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;缺点:虽然比主从模式增加了自动化,但仍不支持自动的数据分区,且随着节点数量增加,管理和配置的复杂性也会增大。在此模式下,有一个主节点负责处理写入请求,而从节点则复制主节点的数据并提供读取服务。以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。
2024-03-30 14:45:53
410
原创 Redis 过期删除策略和内存淘汰策略
放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。全称Least recently used,意思为淘汰掉最久未使用(即。2.设置过期时间的键空间选择性移除。3.(4.0及以上版本可用)1.全局的键空间选择性移除。
2024-03-30 14:19:36
721
原创 数据脱敏技术
数据脱敏(Data Masking)是一种数据安全技术,旨在通过预先设定的规则和算法,对原始数据中包含的敏感信息进行变形处理,使得这些信息在非生产环境(例如开发、测试、分析或培训场景)中使用时,既能保持原有数据格式和业务逻辑的真实性,又能有效保护个人隐私和商业机密不被泄露。在实施数据脱敏时,对诸如身份证号、手机号、银行卡号、个人姓名、家庭住址、电子邮件地址、医疗记录等敏感信息采取替换、遮盖、乱序、加密、截断等手段进行处理,以防止这些敏感信息在未经授权的情况下被识别或滥用。
2024-03-30 08:55:43
1930
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人