国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java接口冪等性,如何重試?

這篇具有很好參考價(jià)值的文章主要介紹了Java接口冪等性,如何重試?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Java接口冪等性,如何重試?



前言

當(dāng)我們寫好一個(gè)項(xiàng)目時(shí),有沒有深深的思考過,如何處理接口冪等性問題呢?今天我們以屈原這句著名詩句“路漫漫其修遠(yuǎn)兮,吾將上下而求索”的精神來探索一下這個(gè)問題。


一、冪等性是什么?

冪等性:簡單來說就是一個(gè)操作多次執(zhí)行的結(jié)果和一次執(zhí)行產(chǎn)生的結(jié)果一致。

二、為什么要冪等性?

答:在計(jì)算機(jī)應(yīng)用中,可能造成網(wǎng)絡(luò)抖動(dòng)、臨時(shí)故障、或者服務(wù)調(diào)用失敗,尤其是分布式系統(tǒng)中,接口調(diào)用失敗更為常見。為了保證服務(wù)的完整性,我們可能會(huì)發(fā)起接口的重試調(diào)用,如果接口不處理冪等,可能會(huì)對(duì)系統(tǒng)造成很大的影響,因此接口的冪等設(shè)計(jì)尤其重要。

如在支付中,如果沒有冪等性,接口的重試可能造成重復(fù)支付。

冪等性和防重是不一樣的,防重不考慮返回值,冪等性要求返回值一樣。
Java接口冪等性,如何重試?

三、使用什么辦法實(shí)現(xiàn)冪等性?

1.insert前先select

通常情況下,在保存數(shù)據(jù)的接口中,我們?yōu)榱朔乐巩a(chǎn)生重復(fù)數(shù)據(jù),一般會(huì)在insert前,先根據(jù)namecode字段select一下數(shù)據(jù)。如果該數(shù)據(jù)已存在,則執(zhí)行update操作,如果不存在,才執(zhí)行 insert操作。

缺點(diǎn): 該方案可能是我們平時(shí)在防止產(chǎn)生重復(fù)數(shù)據(jù)時(shí),使用最多的方案。但是該方案不適用于并發(fā)場(chǎng)景,在并發(fā)場(chǎng)景中,要配合其他方案一起使用,否則同樣會(huì)產(chǎn)生重復(fù)數(shù)據(jù)。我在這里提一下,是為了避免大家踩坑。

2.加悲觀鎖

為了解決這個(gè)問題,可以加悲觀鎖,將用戶A的那行數(shù)據(jù)鎖住,在同一時(shí)刻只允許一個(gè)請(qǐng)求獲得鎖,更新數(shù)據(jù),其他的請(qǐng)求則等待。

缺點(diǎn):不適合冪等性設(shè)計(jì)場(chǎng)景,但是在防重場(chǎng)景中是可以的使用的。

3.加樂觀鎖

為了提升接口性能,我們可以使用樂觀鎖。需要在表中增加一個(gè)timestamp或者version字段。

Java接口冪等性,如何重試?

4.加唯一索引

絕大數(shù)情況下,為了防止重復(fù)數(shù)據(jù)的產(chǎn)生,我們都會(huì)在表中加唯一索引,這是一個(gè)非常簡單,并且有效的方案。
加了唯一索引之后,第一次請(qǐng)求數(shù)據(jù)可以插入成功。但后面的相同請(qǐng)求,插入數(shù)據(jù)時(shí)會(huì)報(bào)Duplicate entry '002' for key 'order.un_code異常,表示唯一索引有沖突。雖說拋異常對(duì)數(shù)據(jù)來說沒有影響,不會(huì)造成錯(cuò)誤數(shù)據(jù)。但是為了保證接口冪等性,我們需要對(duì)該異常進(jìn)行捕獲,然后返回成功。

5.Redis加分布式鎖

其實(shí)前面介紹過的加唯一索引或者加防重表,本質(zhì)是使用了數(shù)據(jù)庫分布式鎖,也屬于分布式鎖的一種。但由于數(shù)據(jù)庫分布式鎖的性能不太好,我們可以改用:rediszookeeper

redis分布式鎖的實(shí)現(xiàn)方式有三種:

1、setNx命令

2、set命令

3、Redission框架

具體步驟:

1、用戶通過瀏覽器發(fā)送請(qǐng)求,服務(wù)器會(huì)收集數(shù)據(jù),并且生成訂單號(hào)code作為唯一業(yè)務(wù)字段。

2、使用redis的set命令,將該訂單code設(shè)置到redis中,同時(shí)設(shè)置超時(shí)時(shí)間。

3、判斷是否設(shè)置成功,如果設(shè)置成功,說明是第一次請(qǐng)求,則數(shù)據(jù)進(jìn)行操作。

4、如果設(shè)置失敗,說明是重復(fù)請(qǐng)求,則直接返回成功。
Java接口冪等性,如何重試?

6.獲取token

除了上述方案之外,還有最后一種使用token的方案。該方案跟之前的所有方案都有點(diǎn)不一樣,需要兩次請(qǐng)求才能完成一次業(yè)務(wù)操作。

兩次請(qǐng)求:

1. 第一次請(qǐng)求獲取`token`
2. 第二次請(qǐng)求帶著這個(gè)`token`,完成業(yè)務(wù)操作。

具體步驟:

  1. 用戶訪問頁面時(shí),瀏覽器自動(dòng)發(fā)起獲取token請(qǐng)求。
  2. 服務(wù)端生成token,保存到redis中,然后返回給瀏覽器。
  3. 用戶通過瀏覽器發(fā)起請(qǐng)求時(shí),攜帶該token。
  4. 在redis中查詢?cè)搕oken是否存在,如果不存在,說明是第一次請(qǐng)求,做則后續(xù)的數(shù)據(jù)操作。
  5. 如果存在,說明是重復(fù)請(qǐng)求,則直接返回成功。
  6. 在redis中token會(huì)在過期時(shí)間之后,被自動(dòng)刪除。

總結(jié)

以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了使用什么辦法實(shí)現(xiàn)冪等性,而具體的解決方案還是需要根據(jù)項(xiàng)目自身選擇。文章來源地址http://www.zghlxwxcb.cn/news/detail-499444.html

到了這里,關(guān)于Java接口冪等性,如何重試?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 警惕看不見的重試機(jī)制:為什么使用RPC必須考慮冪等性

    警惕看不見的重試機(jī)制:為什么使用RPC必須考慮冪等性

    在RPC場(chǎng)景中因?yàn)橹卦嚮蛘邲]有實(shí)現(xiàn)冪等機(jī)制而導(dǎo)致的重復(fù)數(shù)據(jù)問題,必須引起大家重視,有可能會(huì)造成例如一次購買創(chuàng)建多筆訂單,一條通知信息被發(fā)送多次等問題,這是技術(shù)人員必須面對(duì)和解決的問題。 有人可能會(huì)說:當(dāng)調(diào)用失敗時(shí)程序并沒有顯示重試,為什么還會(huì)產(chǎn)生重

    2024年02月06日
    瀏覽(29)
  • 接口冪等性詳解

    所謂接口冪等性就是:在特定場(chǎng)景下,同一條件的多次接口調(diào)用,保證操作只執(zhí)行一次,如果接口沒有保證冪等性,在以下場(chǎng)景就會(huì)產(chǎn)生問題 前端重復(fù)提交:用戶進(jìn)行注冊(cè)、創(chuàng)建個(gè)人信息等操作,由于網(wǎng)絡(luò)抖動(dòng)導(dǎo)致頁面沒有及時(shí)響應(yīng),用戶認(rèn)為沒有成功而多次點(diǎn)擊提交按鈕,

    2024年02月19日
    瀏覽(18)
  • 114 接口中冪等性的保證

    114 接口中冪等性的保證

    同樣是?面試問題? 如何確保接口的?冪等性? 冪等是一個(gè)?較為抽象的概念,?多次重復(fù)訪問,?不會(huì)導(dǎo)致業(yè)務(wù)邏輯的異常? 這里從增刪改查,?幾個(gè)方面列一下? 一般來說,?我們核心需要關(guān)注的就是?新增 和 更新 對(duì)于?增加元素,?首先針對(duì)唯一約束進(jìn)行校驗(yàn), 然后再處理新增的相

    2024年04月23日
    瀏覽(25)
  • 一個(gè)注解實(shí)現(xiàn)接口冪等性,真心優(yōu)雅!

    一個(gè)注解實(shí)現(xiàn)接口冪等性,真心優(yōu)雅!

    簡單來說,就是對(duì)一個(gè)接口執(zhí)行重復(fù)的多次請(qǐng)求,與一次請(qǐng)求所產(chǎn)生的結(jié)果是相同的,聽起來非常容易理解,但要真正的在系統(tǒng)中要始終保持這個(gè)目標(biāo),是需要很嚴(yán)謹(jǐn)?shù)脑O(shè)計(jì)的,在實(shí)際的生產(chǎn)環(huán)境下,我們應(yīng)該保證任何接口都是冪等的,而如何正確的實(shí)現(xiàn)冪等,就是本文要討

    2024年02月03日
    瀏覽(27)
  • 分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn)

    分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn)

    面對(duì)分布式架構(gòu)和微服務(wù)復(fù)雜的系統(tǒng)架構(gòu)和網(wǎng)絡(luò)超時(shí)服務(wù)器異常等帶來的系統(tǒng)穩(wěn)定性問題,分布式接口的冪等性設(shè)計(jì)顯得尤為重要。本文簡要介紹了幾種分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn),包括Token去重機(jī)制、樂觀鎖機(jī)制、數(shù)據(jù)庫主鍵和狀態(tài)機(jī)實(shí)現(xiàn)等,以加深理解。 1、分布式接口冪

    2024年02月05日
    瀏覽(47)
  • 【重復(fù)處理】CRUD接口冪等性處理

    非并發(fā)情況下,查詢業(yè)務(wù)單號(hào)有沒有操作過,沒有則執(zhí)行操作 針對(duì)第一次執(zhí)行業(yè)務(wù)時(shí)間,有大量并發(fā)情況下,整個(gè)操作過程加鎖,通過分布式鎖來加鎖 Select操作:不會(huì)對(duì)業(yè)務(wù)數(shù)據(jù)有影響,天然冪等 Delete操作:第一次已經(jīng)刪除,第二次刪除也不會(huì)有影響 根據(jù)唯一的業(yè)務(wù)號(hào)刪除

    2024年02月12日
    瀏覽(29)
  • 一文搞定接口冪等性架構(gòu)設(shè)計(jì)方案

    一文搞定接口冪等性架構(gòu)設(shè)計(jì)方案

    現(xiàn)如今很多系統(tǒng)都會(huì)基于分布式或微服務(wù)思想完成對(duì)系統(tǒng)的架構(gòu)設(shè)計(jì)。那么在這一個(gè)系統(tǒng)中,就會(huì)存在若干個(gè)微服務(wù),而且服務(wù)間也會(huì)產(chǎn)生相互通信調(diào)用。那么既然產(chǎn)生了服務(wù)調(diào)用,就必然會(huì)存在服務(wù)調(diào)用延遲或失敗的問題。當(dāng)出現(xiàn)這種問題,服務(wù)端會(huì)進(jìn)行重試等操作或客戶

    2023年04月20日
    瀏覽(19)
  • Spring Boot 實(shí)現(xiàn)接口冪等性的 4 種方案

    Spring Boot 實(shí)現(xiàn)接口冪等性的 4 種方案

    現(xiàn)在的系統(tǒng)或平臺(tái),為了追求體驗(yàn)性、內(nèi)容豐富性,都是前后端分離,系統(tǒng)為了解藕會(huì)引入各種MQ等,都不可避免就引入了數(shù)據(jù)冪等性的問題。 冪等是一個(gè)數(shù)學(xué)與計(jì)算機(jī)學(xué)概念,在數(shù)學(xué)中某一運(yùn)算為冪等時(shí),其作用在任一元素兩次會(huì)和其作用一次的結(jié)果相同。 在計(jì)算機(jī)編程中

    2024年02月06日
    瀏覽(26)
  • redis+token+分布式鎖確保接口的冪等性

    redis+token+分布式鎖確保接口的冪等性

    目錄 1.冪等性是什么? 2.如何實(shí)現(xiàn)冪等性呢? 1.新增管理員,出彈窗的同時(shí),請(qǐng)求后臺(tái)。 2.后端根據(jù)雪花算法生成唯一標(biāo)識(shí)key,以雪花數(shù)為key存到redis。并返回key給前端。 3.前端保存后端傳過來的key。 4.前端輸入完成信息,點(diǎn)擊【保存】,攜帶key請(qǐng)求后端。 5.請(qǐng)求到達(dá)后端,

    2024年02月14日
    瀏覽(21)
  • 【微信小程序】Java實(shí)現(xiàn)微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出現(xiàn)的多次回調(diào)的問題解析,接口冪等性)

    【微信小程序】Java實(shí)現(xiàn)微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出現(xiàn)的多次回調(diào)的問題解析,接口冪等性)

    ? ? ? 對(duì)于一個(gè)沒有寫過支付的小白,打開微信支付官方文檔時(shí)徹底懵逼 ,因?yàn)?微信支付文檔太過詳細(xì), 導(dǎo)致我無從下手,所以寫此文章,幫助第一次寫支付的小伙伴梳理一下。 一、流程分為三個(gè)接口:(這是前言,先看一遍,保持印象,方便理解代碼) 1、第一個(gè)接口:

    2024年01月16日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包