利用無事務方式插入數據庫解決并發插入問題(最小主鍵id思路)

一、背景

由于某業務需要回退某產品數據緩存列表Asset資源,主任務執行后,通過并行執行批量子任務進行數據回退,子任務中會記錄緩存列表Asset和緩存列表行AssetLine數據,并行執行過程會出現緩存列表行AssetLine重復插入問題,導致后續業務執行變更資源時候報錯。

以前寫過一篇也是利用無事務方式解決并發問題,主要是通過獲取插入后的自增主鍵id,防止并發場景,再次查詢一次,如果id一致,則代表插入成功,如果id不一致,則代表插入失敗,刪除這條舊數據。利用無事務方式插入數據庫解決并發插入問題,本文通過另一種思路無事務解決并發插入數據庫,數據重復問題。

二、方案實現

1.先根據id查詢數據庫中是否存在該數據,如果存在則代表已經插入過了,直接返回
2.如果不存在此條數據,插入數據庫
3.獲取插入后的自增主鍵id,查詢SQL倒序desc排序
4.防止并發場景,再次查詢一次,
查詢出來的數據是按照id倒序,最后1條id最小。
如果id最小的不是當前插入的id,表示當前入庫之前已經有數據入庫,需要失效當前數據,
然后取id最小的那1條作為有效數據。

偽代碼實現

// 當前需要插入的數據
AssetLine needAddAssetLine;
// 根據assetId查詢當前數據
Lisst<AssetLine> assetLineList = findByAssetId(assetId);
Optional<AssetLine> minIdVo = assetLineList.stream().min(Comparator.comparing(AssetLine::getId));
if(minIdVo.isPresent()){AssetLine  minIdAssetLine = minIdVo.get();if(needAddAssetLine.getId() != minIdAssetLine.getId()){//失效需要新增的數據 int count = updateByAssetId(needAddAssetLine.getId());if(count != 0){needAddAssetLine.setId(minIdAssetLine.getId());}}
}

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

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

相關文章

如何制作免費的比特幣冷錢包

本文主要從技術上討論冷錢包的操作機制和原理&#xff0c;并不作為投資建議。對于國外的比特幣玩家&#xff0c;或者打算長期囤幣來對抗通貨膨脹的&#xff0c;或者是想短期持有的&#xff0c;那么將比特幣存儲在哪里是一個Common的問題。一般是兩類選擇。第一種選擇是存儲在交…

新手向:Python制作簡易音樂播放器

使用Python構建簡易音樂播放器音樂播放器是現代數字生活中不可或缺的工具&#xff0c;從智能手機到電腦系統&#xff0c;幾乎每個設備都內置了音樂播放功能。對于Python初學者來說&#xff0c;開發一個簡易的音樂播放器是一個很好的實踐項目&#xff0c;既能學習編程基礎&#…

【StarRocks】TabletChecker邏輯

TabletChecker是StarRocks FE里的一個組件,它的主要工作是檢查出所有的處于不健康狀態的tablets。 注意,它的職責就是check(檢查)。 至于tablet修復、均衡等調度工作不是TabletChecker的職責。 相關配置項 // 20秒執行一次check,代碼里是執行runAfterCatalogReady()publi…

低空經濟展 | 優翼仿真攜eVTOL全動飛行模擬器亮相2025深圳eVTOL展

2025深圳eVTOL展將于2025年9月23-25日在深圳坪山燕子湖國際會展中心舉行。展會以“低空經濟?eVTOL?航空應急救援?商載大型無人運輸機”為主題&#xff0c;以 “2天大會3天展覽項目考察飛行表演頒獎盛典項目路演”的多元模式&#xff0c;打造覆蓋 eVTOL全產業鏈的專業化合作平…

AI驅動商業革新:開源大模型與零售精準營銷引領產業升級

在當今數字化浪潮中&#xff0c;AI 正以迅猛之勢滲透至商業的每一處脈絡&#xff0c;掀起一場影響深遠的變革風暴&#xff0c;從根本上改寫著商業運轉的底層邏輯&#xff0c;創造出無數嶄新的商業契機。基礎模型領域&#xff0c;新的突破正在重塑行業格局。Meta 旗下的 LLaMA 3…

【表的操作】

文章目錄 一、查看所有表 1、語法 二、創建表 1、語法 2、?例 3、表在磁盤上對應的?件 4、創建數據加時使?校驗語句[if not exists] 三、查看表結構 1、語法 2、?例 四、修改表 1、語法 2、?例 (1)向表中添加?列 (2)修改某列的?度 (3)重命名某列 (4)刪除某個字段…

【Java后端】Spring Boot 全局異常處理最佳實踐

Spring Boot 全局異常處理最佳實踐 在日常開發中&#xff0c;異常處理幾乎是繞不過去的一個話題。尤其在 后端 API 項目 中&#xff0c;如果沒有統一的異常處理機制&#xff0c;很容易出現以下問題&#xff1a; Controller 層代碼里充斥著 try-catch&#xff0c;顯得冗余。前端…

K8S-Configmap資源

目錄 一、核心概念? ?定義? ?核心價值? ?與Secret的區別? ?二、核心特性? ?數據存儲? ?生命周期? ?作用域? 什么是 Configmap&#xff1f; Configmap 能解決哪些問題&#xff1f; ConfigMap 的主要作用 三、命令行直接創建 四、通過文件創建&#xf…

MySQL InnoDB事務acid特性的原理和隔離級別的實現原理

InnoDB存儲引擎 InnoDB存儲結構表空間 則每張表都會有一個表空間&#xff08;xxx.ibd&#xff09;&#xff0c;一個mysql實例可以對應多個表空間 系統表空間 存儲數據字典&#xff08;表結構定義、索引信息等&#xff09;、Change Buffer、Doublewrite Bufferundo log&#xff…

Linux系統之部署nullboard任務管理工具

Linux系統之部署nullboard任務管理工具一、nullboard介紹1.1 nullboard簡介1.2 任務看板工具介紹1.3 nullboard使用場景二、本次實踐介紹2.1 本地環境規劃2.2 本次實踐介紹三、安裝httpd軟件3.1 檢查yum倉庫3.2 安裝httpd軟件3.3 啟動httpd服務3.4 查看httpd服務狀態3.5 防火墻…

Qt設置軟件使用期限【新版防修改系統時間】

在工業軟件或其他領域中&#xff0c;經常會對軟件進行授權&#xff0c;軟件需要付費進行有期限的使用。以下是我用Qt設計的設置軟件使用期限的兩種方案。 主體思想&#xff1a; 1.軟件需要綁定機器&#xff0c;讓用戶無法通過復制在另一臺機器上運行。 2.由廠家提供激活碼供用戶…

【JavaEE】多線程(線程安全問題)

有些代碼在單個線程環境下執行正確&#xff0c;如果同樣的代碼在多個線程下同時執行可能就會出現問題&#xff0c;這個就是線程安全問題&#xff08;或者稱線程不安全問題&#xff09;&#xff0c;簡而言之就是&#xff1a;線程安全問題是由于多線程出現的問題&#xff0c;原因…

NodeJs 桌面開發學習 electron.js (一)

今天開始學習NodeJs 關于 桌面應用的內容&#xff0c;長期目標是 React electron 實現一個桌面應用。今天先實現一個簡單的目標&#xff0c;搭建一個Electron ts 項目架構&#xff0c;并實現主業務線程 和前端渲染線程的交互一、代碼結構和配置例子項目結構大致如下&#xff…

diffusion model(1.4) 相關論文閱讀清單

以下是閱讀清單&#xff1a; 《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》擴散模型&#xff0c;arxiv鏈接《Denoising Diffusion Probabilistic Models》DDPM論文 arxiv鏈接

ESP32-C3_SMARTCAR

前言: 前面用stm32f103c8t6 rt-thread 寫了個智能小車程序 這章用esp32-c3 重新來遍 1&#xff1a;環境 vscodeidf5.4 esp32-3c 找到一塊MIN的底板 湊合用&#xff08;138 cm左右&#xff09; 一個L298N 一個船型開關&#xff0c; 一個665mm 2腳按鈕 鋰電池 186502 及電池盒&a…

消費者API

目錄獨立消費者案例&#xff08;訂閱主題&#xff09;獨立消費者案例&#xff08;訂閱分區&#xff09;消費者組案例獨立消費者案例&#xff08;訂閱主題&#xff09; package com.tsg.kafka.consumer;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.ap…

C# NX二次開發:操作按鈕控件Button和標簽控件Label詳解

大家好&#xff0c;今天介紹ug二次開發過程中的一個叫操作按鈕的控件&#xff0c;這個控件在塊UI編輯器中可以使用。 ? Button這個控件的屬性和方法如下所示&#xff1a; namespace NXOpen.BlockStyler { public class Label : UIBlock { protected intern…

Vue.prototype 的作用

在 Vue.js 中&#xff0c;Vue.prototype 是用來向所有 Vue 實例添加屬性或方法的機制。通過它添加的屬性或方法可以在所有 Vue 組件實例中通過 this 訪問。主要作用添加全局方法或屬性&#xff1a;可以在所有組件中使用的工具方法或常量擴展 Vue 功能&#xff1a;添加 Vue 本身…

Javaee 多線程 --進程和線程之間的區別和聯系

文章目錄進程和線程進程線程進程和線程的區別創建線程的五種寫法繼承Thread,重寫run實現Runnable(接口)&#xff0c;重寫run繼承Thread,重寫run,但是使用匿名內部類實現Runnable(接口)&#xff0c;重寫run&#xff0c;但是使用匿名內部類使用lambda表達式請說明Thread類中run和…

企業如何讓內部視頻僅限指定域名播放,確保視頻不被泄露?

在數字化辦公時代&#xff0c;企業內部的培訓視頻、產品演示或機密會議錄像等敏感內容&#xff0c;一旦被非法傳播或泄露&#xff0c;可能帶來嚴重的商業風險。如何確保這些視頻只能在公司官網或指定域名播放&#xff0c;防止被惡意下載、盜鏈或二次傳播&#xff1f;今天介紹一…