基于 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(

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83586.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ELK日志采集系統

ELK 日志采集系統指的是由 Elasticsearch、Logstash 和 Kibana 三個核心開源軟件組成的套件&#xff0c;用于集中式日志的采集、處理、存儲、搜索、分析和可視化。它現在更常被稱為 Elastic Stack&#xff0c;因為其組件生態已經擴展&#xff08;尤其是引入了 Beats&#xff09…

什么是音頻?

引言&#xff1a;聲音的本質 什么是音頻&#xff1f;振動與感知 音頻&#xff0c;在其最核心的層面&#xff0c;即是我們通常所說的聲音。它起源于物體的振動。這些振動擾動了其周圍的介質&#xff08;例如空氣或水&#xff09;&#xff0c;在介質中產生了微小的壓力變化&…

接口 RESTful 中的超媒體:REST 架構的靈魂驅動

在 RESTful 架構中&#xff0c;** 超媒體&#xff08;Hypermedia&#xff09;** 是一個核心概念&#xff0c;它體現了 REST 的 “表述性狀態轉移&#xff08;Representational State Transfer&#xff09;” 的本質&#xff0c;也是區分 “真 RESTful API” 與 “偽 RESTful AP…

centos clamav 掃描及告警配置

centos clamav 掃描及告警配置 1 下載1.1官網下載1.2 在線下載2 配置3 掃描3.1 更新病毒庫3.2 掃描4 告警4.1 安裝 Postfix4.2 安裝mail郵件工具4.3 配置4.4 發送告警郵箱信息5 定時配置(cronie)5.1 定時更新病毒庫5.2 定時掃描1 下載 1.1官網下載 官網下載地址,下載rpm包…

華為WLAN概述知識點及案例試題

目錄 &#x1f4d8; 華為WLAN概述知識點及案例總結? 一、WLAN技術背景&#x1f4cc; 為什么需要WLAN&#xff1f;&#x1f4cc; 應用趨勢&#xff1a; ? 二、WLAN基本概念&#x1f4cc; WLAN定義&#x1f4cb; IEEE 802.11與Wi-Fi標準演進&#x1f4cb; 發展趨勢&#xff08;…

MultiTalk 是一種音頻驅動的多人對話視頻生成模型

TL;DR&#xff1a;MultiTalk 是一種音頻驅動的多人對話視頻生成。它支持多人對話&#x1f4ac;、唱&#x1f3a4;歌、交互控制和&#x1f46c;卡通&#x1f64a;的視頻創建。 視頻演示 001.mp4 004.mp4 003.mp4 002.mp4 005.mp4 006.mp4 003.mp4 002.mp4…

實現無縫連接:EtherNet/IP轉CANopen網關助力汽車制造智能化未來

在如今這個高度自動化的汽車制造行業&#xff0c;設備之間的互操作性變得越來越重要&#xff0c;在一條自動化裝配線上&#xff0c;貝加萊的PLC和CANopen伺服驅動器以及通過EtherNet/IP轉CANopen網關&#xff08;穩聯技術的WL-EIP-COP&#xff09;緊密合作&#xff0c;帶來了精…

音視頻之H.264的句法和語義

系列文章&#xff1a; 1、音視頻之視頻壓縮技術及數字視頻綜述 2、音視頻之視頻壓縮編碼的基本原理 3、音視頻之H.264/AVC編碼器原理 4、音視頻之H.264的句法和語義 在編碼器輸出的碼流中&#xff0c;數據的基本單位是句法元素。每個句法元素由若干比特組成&#xff0c;它表…

M - 中位數

Description 給定一個長度為 NN 的非負整數序列 AA&#xff0c;對于前奇數項求中位數。 Input 第一行一個正整數 NN。 第二行 NN 個正整數 A1…NA1…N?。 Output 共 ?N12??2N1?? 行&#xff0c;第 ii 行為 A1…2i?1A1…2i?1? 的中位數。 Sample 1 InputcopyOu…

醫療耗材領域LCS4110R加密芯片應用

醫療器械和醫美器械應用廣泛&#xff0c;需求增加&#xff0c;發展迅速。醫療器械和醫美器械的使用關系到人民群眾的健康安全&#xff0c;以至于生命安全。假冒偽劣器械產品的混入導致對患者的健康危害&#xff0c;同時也損害了設備廠商的利益。防復制加密認證芯片LCS4110R應用…

數據結構與算法:貪心(一)

前言 有一說一貪心的題目真的ex,想不到就是想不到…… 一、貪心 貪心就是通過在過程中每次達到局部最優,從而在最后實現整體最優。貪心的題目經常要用到排序和堆。 越打cf越能感受到貪心的奇妙,很吃狀態和靈感。解題的過程中往往依賴舉大量例子,然后進行總結和歸納,然…

5、Spring AI(MCPServer+MCPClient+Ollama)開發環境搭建_第一篇

前言&#xff1a; 該開發環境是在 3、后端持久化&#xff08;SpringBoot3.5.0MybatisPlus3.5.5mysql8.4.0&#xff09;環境搭建 上進行改造的&#xff0c;用到了后端持久化&#xff0c;主要改造的地方為數據庫把email字段改為height&#xff08;身高&#xff09;&#xff0c;…

個典型的 Java 泛型在反序列化場景下“類型擦除 + 無法推斷具體類型”導致的隱性 Bug

今天遇到一個問題&#xff1a;一個典型的 Java 泛型在反序列化場景下“類型擦除 無法推斷具體類型”導致的隱性 Bug&#xff0c;尤其是在 RPC&#xff08;如 Dubbo、Feign 等&#xff09;和 本地 JVM 內直連調用共存時&#xff0c;這種問題會顯現得非常明顯。 A 服務暴露了一…

開發指南121-微服務的彈性伸縮

平臺的后臺服務表現形式就是各種各樣的微服務。微服務可以部署在不同的機器上。單一服務的伸縮很簡單&#xff1a; 部署在不同機器上&#xff0c;直接啟動關閉即可。 部署在同一機器上&#xff0c;可以復制為多個不同目錄&#xff0c;其中jar包&#xff0c;啟動文件是完全一樣…

【C++特殊工具與技術】優化內存分配(六):運行時類型識別

目錄 一、RTTI 的核心機制與設計背景 1.1 RTTI 的設計目標 1.2 RTTI 的啟動條件 二、dynamic_cast&#xff1a;動態類型轉換 2.1 語法與核心特性 2.2 轉換場景詳解 2.3 引用類型轉換與異常處理 2.4 性能注意事項 三、typeid&#xff1a;類型信息查詢 3.1 語法與核心特…

USB串口通信、握手協議、深度學習等技術要點

基于OpenMV的智能車牌識別系統&#xff1a;從硬件到算法的完整實現 前言 本文將詳細介紹一個基于OpenMV微控制器的智能車牌識別系統的設計與實現。該系統集成了嵌入式視覺處理、串口通信協議、深度學習OCR識別等多種技術&#xff0c;實現了從圖像采集到車牌識別的完整流程。 …

獵板PCB:手機主板pcb需要做哪些可靠性測試

在智能手機高度普及的今天&#xff0c;一塊指甲蓋大小的主板承載著通信、計算、影像等核心功能。當消費者為新機性能歡呼時&#xff0c;鮮少有人關注到主板PCB&#xff08;印刷電路板&#xff09;在幕后經歷的嚴苛考驗。這些隱藏在金屬外殼下的精密線路&#xff0c;需要經過多輪…

Java并發編程實戰 Day 21:分布式并發控制

【Java并發編程實戰 Day 21】分布式并發控制 文章簡述&#xff1a; 在高并發和分布式系統中&#xff0c;傳統的線程級鎖已無法滿足跨節點的同步需求。本文深入講解了分布式并發控制的核心概念與技術方案&#xff0c;包括分布式鎖、一致性算法&#xff08;如Paxos、Raft&#x…

C語言文件操作與預處理詳解

目錄 文件操作文件基本概念文件指針文件打開模式文件讀取操作字符讀取字符串讀取格式化讀取二進制讀取 文件寫入操作字符寫入字符串寫入格式化寫入二進制寫入 文件定位操作文件錯誤處理 預處理預處理基本概念常見預處理指令文件包含指令宏定義簡單宏帶參數的宏字符串化操作符(#…

水庫大壩安全監測之滲流監測

水庫大壩的滲流狀況直接關系到其結構穩定性與安全運行。滲流可能引發壩體內部土體的滲透變形&#xff0c;如管涌、流土等現象&#xff0c;削弱壩體強度&#xff0c;嚴重時甚至導致大壩垮塌&#xff0c;威脅下游人民生命財產安全。通過滲流監測&#xff0c;能夠實時掌握壩體及壩…