当前位置: 首页 > news >正文

基于 Redis 的幂等性设计:SpringBoot @Async 在高并发 MySQL 日志存储中的应用

一、问题描述

在高并发场景下,大量设备实时上报状态数据,需要异步保存到MySQL,同时需要解决幂等性校验和线程池耗尽问题。

二、解决方案

1. 幂等性控制

作用:确保同一请求无论执行多少次,结果都一致,避免重复处理。

实现方式

  • 唯一标识:设备ID + 时间戳组合
  • Redis原子操作:SET NX EX实现原子校验
  • 多级保障:Redis快速判断 + 数据库唯一索引 + 业务层查询确认
  • 超时机制:设置合理过期时间,避免永久占用资源

2. 防止线程池耗尽

策略

  • 合理配置线程池
    • 核心线程数:CPU核心数×2
    • 最大线程数:100
    • 队列容量:500
    • 拒绝策略:CallerRunsPolicy(压力返回调用方)
  • 快速失败:幂等校验快速过滤重复请求
  • 监控告警:建议添加线程池监控指标

3. 异步处理模式

CompletableFuture等待结果模式

  • 控制器等待异步操作完成后返回结果
  • 设置超时时间(5秒)避免无限等待
  • 超时返回HTTP 202状态码,提供状态查询接口

三、示例

1.Controller

@PostMapping("/{deviceId}/status")
public ResponseEntity<?> reportStatus(@PathVariable String deviceId,@RequestParam("timestamp") long timestamp,@RequestBody DeviceStatus status) {String requestId = "device:" + deviceId + ":status:" + timestamp;try {// 等待异步操作完成(最多5秒)deviceStatusService.processDeviceStatus(requestId, deviceId, timestamp, status).get(5, TimeUnit.SECONDS);return ResponseEntity.ok().build();} catch (TimeoutException e) {return ResponseEntity.accepted().header("X-Request-ID", requestId).build();} catch (Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}
}

2.Service

@Async("deviceStatusExecutor")
public CompletableFuture<Void> processDeviceStatus(

相关文章:

  • Mac 系统 Node.js 安装与版本管理指南
  • RAG检索前处理
  • GO后端开发内存管理及参考答案
  • adb 查看android 设备的硬盘及存储空间
  • 录制mp4 rospy
  • 2025年中国人工智能发展研究报告:技术突破、行业变革与全球竞争新格局
  • Spring 路由匹配机制详解:时间复杂度从 O(n) 降至 O(log n)
  • 学习STC51单片机36(芯片为STC89C52RCRC)智能小车3(PWM差速小车)
  • Redis 安装实践:基于鲲鹏 ARM 架构 Ubuntu 环境
  • 随记:sw2urdf插件导出urdf模型在ROS2-rviz2显示
  • 电流传感器在工业自动化中的应用
  • Tess4J:基于 Java 的 OCR 解决方案
  • 【doris】doris集成ranger控制权限,ranger配置无法存储doris密码password信息
  • 代码随想录训练营第三十天 | 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
  • 【Net】OPC UA(OPC Unified Architecture)协议
  • 图片压缩工具类
  • 深入剖析 C++ 默认函数:拷贝构造与赋值运算符重载
  • 你管这玩意叫网络?网络图解
  • CANoe入门(1)-- 创建新CANoe工程
  • 开源综合性网络安全检测和运维工具-TscanClient
  • 自己怎样做网站/品牌宣传策划方案
  • 昆明网站建设公司推荐/最佳的资源磁力搜索引擎
  • 北京 网站设计 公司/抖音seo是什么意思
  • 私密浏览器免费版的优缺点/seo薪酬如何
  • 网站建设图片/seo推广是什么意思呢
  • wordpress5.2中文/seo排名赚app最新版本