常见面试题23

简介: Redis红锁通过多节点加锁解决主从故障导致的锁失效问题,但Redisson实现存在缺陷,不建议使用。MQ用于异步削峰、系统解耦,适用于数据同步、短信通知等场景。通过生产者确认、消费者重试等机制保障消息可靠传输与处理。

redis红锁

问题

在redis集群中;如果请求一个分布式锁成功;但slave还没有复制同步这个锁,master宕机了;再次去加锁的时候会从继任了master的原slave上申请加锁,也会成功。导致同一个锁被获取了不止一次。

解决

对集群的每个节点进行加锁,如果大多数(N/2+1)加锁成功了,则认为获取锁成功。

Redisson实现了红锁;但是它对每个加锁的实现,不能保证每个锁落在不同的master上。不建议使用

直接使用Redisson的普通锁即可。

为什么要使用MQ

1、分布式系统下可以实现异步处理业务,削峰填谷的功能;

2、实现消费者和生产者之间的解耦;——系统解耦

MQ应用场景

应用场景1:当后台系统对数据进行添加、删除、修改后,将会发送一个消息,接收到此消息的微服务可执行对应业务。如:更新ElasticSearch的数据,更新动态,支付状态检查

应用场景2:用户登录、注册时,向用户发送短信验证码。

MQ如何保障发送消息可靠

简易快速容易实现的做法

1、开启生产者重试机制;

2、启用生产者发送消息后确认机制(ConfirmCallback)

理论上更可靠方案(一般不那么搞)

  1. 把消息数据写入数据库,用状态码来控制消息发送状态。
  2. 开启定时任务,间隔3秒,查询未发送的消息。
  3. 调用消息生产者,发送消息到MQ中间件。
  4. 消息生产者,设置confirmCallback确认回调对象,判断ack

-- true: 消息发送成功,修改消息发送状态为: 已发送。

-- false: 消息发送失败。定时任务重发

MQ如何保障消费消息可靠

比较现实和常见的做法

1、消费者确认机制

2、设置失败重试机制

3、重试失败后投递到其它交换机再处理

4、主动查询业务(兜底方案)

理论上方案

  1. 接收到消息后,直接存入数据库(消息幂等的处理)。
  2. 定时任务定时扫描数据库未处理消息。
目录
相关文章
|
2月前
|
负载均衡 Java Maven
常见面试题28
Maven 是 Java 项目自动化构建工具,用于项目构建、依赖管理、生命周期管理及项目信息维护。遵循标准目录结构和“约定优于配置”原则,支持清理、编译、测试、打包、部署等操作,提升开发效率与规范性。
106 9
|
Prometheus 监控 Kubernetes
【K8S系列】深入解析K8S监控
【K8S系列】深入解析K8S监控
1217 0
|
3月前
|
人工智能 前端开发 JavaScript
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
611 18
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
|
9月前
|
机器学习/深度学习 人工智能 缓存
SepLLM:开源大模型加速神器!400万Token长文本推理提速50%,告别OOM噩梦
SepLLM 是一个用于加速大语言模型的高效框架,通过压缩段落信息并消除冗余标记,显著提高了模型的推理速度和计算效率,适用于长文本处理和多场景部署。
431 7
SepLLM:开源大模型加速神器!400万Token长文本推理提速50%,告别OOM噩梦
|
6月前
|
存储 安全 Java
2025 年 Java 秋招面试必看的 Java 并发编程面试题汇总
文章摘要: 本文系统梳理Java并发编程核心知识点,助力2025年秋招面试。内容涵盖:1)基础概念,包括线程/进程区别、创建线程的3种方式(Thread/Runnable/Callable)、6种线程状态及转换;2)关键机制,对比sleep()与wait()的锁行为差异,解释start()而非run()启动线程的原因;3)工具类与典型应用场景。通过技术原理与代码示例结合的方式,帮助开发者深入理解并发模型、线程同步等核心问题,为高并发系统设计打下坚实基础。(150字)
390 0
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
739 93
|
算法 NoSQL 安全
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
416 2
|
Kubernetes 监控 Serverless
Serverless 应用引擎中SAE与ECI的区别是什么?
Serverless 应用引擎中SAE与ECI的区别是什么?
822 3
|
JSON 前端开发 Java
管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)
管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)