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

redis如何保證接口的冪等性

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

背景

如何防止接口中同樣的數(shù)據(jù)提交,以及如何保證消息不被重復(fù)消費(fèi),這些都是shigen在學(xué)習(xí)的過程中遇到的問題。今天,趁著在學(xué)習(xí)redis的間隙,我寫了一篇文章進(jìn)行簡單的實(shí)現(xiàn)。

注意:僅使用于單機(jī)的場景,對于分布式、高并發(fā)場景,還是建議使用分布式鎖。

首先我們分析一下Restful接口和冪等性的關(guān)系:

請求方式 是否冪等 對應(yīng)的sql案例
get select * from user;
put update user set name=‘shigen’ where id =10001;
delete delete from user where id = 10002;
Post insert into user (id, name) values(10002, ‘shigen’);

可見我們主要是針對post的請求方式做進(jìn)一步的優(yōu)化。

常用的解決方式

大概主流的解決方案:

  • token機(jī)制(前端帶著在請求頭上帶著標(biāo)識(shí),后端驗(yàn)證)
  • 加鎖機(jī)制
    • 數(shù)據(jù)庫悲觀鎖(鎖表)
    • 數(shù)據(jù)庫樂觀鎖(version號(hào)進(jìn)行控制)
    • 業(yè)務(wù)層分布式鎖(加分布式鎖redisson)
  • 全局唯一索引機(jī)制,ID不能重復(fù)
  • redis的set機(jī)制
  • 前端按鈕加限制,類似于vue的v-once指令,但前提是用戶不刷新頁面

今天用到的就是redis的set方法。我們只需要一個(gè)注解即可實(shí)現(xiàn),接下來看看shigen是如何的設(shè)計(jì)吧!

代碼實(shí)現(xiàn)

  • 自定義注解Idempotent

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

其中的value表示接口的唯一標(biāo)識(shí),可以為空,下邊的IdempotentAspect中會(huì)講到

  • 定義IdempotentAspect的切片

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

這里主要是定義一個(gè)切片的環(huán)繞通知,在里邊處理主要的接口防刷邏輯

  • 冪等性處理類IdempotentProcessor

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

接口的唯一標(biāo)識(shí)變成了方法名+方法的參數(shù)

  • 冪等性處理接口IdempotentProcessor的實(shí)現(xiàn)類RedisIdempotentProcessor

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

好的所有的準(zhǔn)備已經(jīng)就緒,現(xiàn)在我們寫一個(gè)測試的接口測試一下:

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

采用的是get請求測試,是為了方便。post請求的使用也和案例一樣。

直接寫上一個(gè)注解即可。我們還是采用ab進(jìn)行測試。

ab -n 2 '127.0.0.1:9000/idempotent/test?msg=test'

控制臺(tái)的輸出如下:

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全

成功了一次,失敗了1次,并且redis中出現(xiàn)了值為true的keytesttest。java后端也如期的出現(xiàn)了the same requests的異常信息。

redis如何保證接口的冪等性,redis,數(shù)據(jù)庫,緩存,安全


好了,以上就是《redis如何保證接口的冪等性》的全部內(nèi)容了,覺得不錯(cuò)的話,記得點(diǎn)贊 在看 轉(zhuǎn)發(fā) 關(guān)注哈,感謝您的支持。

shigen一起,每天不一樣!文章來源地址http://www.zghlxwxcb.cn/news/detail-702134.html

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

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

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

相關(guān)文章

  • RabbitMQ防止消息重復(fù)消費(fèi)、保證異步消息的冪等性

    一、rabbitmq出現(xiàn)消息重復(fù)的場景 1、消費(fèi)成功,沒有進(jìn)行ack,這時(shí)?Broker?會(huì)重新發(fā)送 2、不確認(rèn)(unack)或 reject?之后,重新排隊(duì),Broker?會(huì)重新發(fā)送 3、消費(fèi)成功,ack時(shí)宕機(jī),沒有ack成功,消息由unack變?yōu)閞eady,Broker又重新發(fā)送 4、總的來說就是 Broker?發(fā)送消息后,消費(fèi)端收到消息

    2024年02月13日
    瀏覽(23)
  • 騰訊二面:如何保證接口冪等性?高并發(fā)下的接口冪等性如何實(shí)現(xiàn)?

    什么是接口冪等性 接口冪等性這一概念源于數(shù)學(xué),原意是指一個(gè)操作如果連續(xù)執(zhí)行多次所產(chǎn)生的結(jié)果與僅執(zhí)行一次的效果相同,那么我們就稱這個(gè)操作是冪等的。在互聯(lián)網(wǎng)領(lǐng)域,特別是在Web服務(wù)、API設(shè)計(jì)和分布式系統(tǒng)中,接口冪等性具有非常重要的意義。 具體到HTTP接口或者

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

    114 接口中冪等性的保證

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

    2024年04月23日
    瀏覽(25)
  • RabbitMQ如何保證冪等性

    RabbitMQ如何保證冪等性

    一、簡介 冪等性是分布式中比較重要的一個(gè)概念,是指在多作業(yè)操作時(shí)候避免造成重復(fù)影響,其實(shí)就是保證同一個(gè)消息不被消費(fèi)者重復(fù)消費(fèi)兩次,但是可能存在網(wǎng)絡(luò)波動(dòng)等問題,生產(chǎn)者無法接受消費(fèi)者發(fā)送的ack信息,因此這條消息將會(huì)被重復(fù)發(fā)送給其他消費(fèi)者進(jìn)行消費(fèi),實(shí)際

    2024年02月15日
    瀏覽(22)
  • RabbitMQ-業(yè)務(wù)的冪等性

    生產(chǎn)者和消費(fèi)者都需要添加配置類: 消費(fèi)者拿到id之后,保存到數(shù)據(jù)庫,后續(xù)消費(fèi)時(shí),需要查數(shù)據(jù)庫進(jìn)行比較,因此這種方案的缺點(diǎn)就是有業(yè)務(wù)的入侵,對性有一定的影響。 (1)查詢和刪除操作本身就是冪等性操作。 (2)可以使用分布式鎖,對單據(jù)id鎖定,防止多次提交,

    2024年01月21日
    瀏覽(21)
  • 談?wù)?Kafka 的冪等性 Producer

    使用消息隊(duì)列,我們肯定希望不丟消息,也就是消息隊(duì)列組件,需要保證消息的可靠交付。消息交付的可靠性保障,有以下三種承諾: 最多一次(at most once):消息可能會(huì)丟失,但絕不會(huì)被重復(fù)發(fā)送。 至少一次(at least once):消息不會(huì)丟失,但有可能被重復(fù)發(fā)送。 精確一次

    2024年02月14日
    瀏覽(16)
  • 【RabbitMQ】RabbitMQ如何確認(rèn)消息被消費(fèi)、以及保證消息的冪等

    【RabbitMQ】RabbitMQ如何確認(rèn)消息被消費(fèi)、以及保證消息的冪等

    目錄 一、如何保證消息被消費(fèi) 二、如何保證消息冪等性 RabbitMQ提供了消息補(bǔ)償機(jī)制來保證消息被消費(fèi),當(dāng)一條消費(fèi)被發(fā)送后,到達(dá)隊(duì)列后發(fā)給消費(fèi)者。消費(fèi)者消費(fèi)成功后會(huì)給MQ服務(wù)器的隊(duì)列發(fā)送一個(gè)確認(rèn)消息,此時(shí)會(huì)有一個(gè)回調(diào)檢測服務(wù)監(jiān)聽該接收確認(rèn)消息的隊(duì)列,然將消費(fèi)

    2024年02月16日
    瀏覽(24)
  • SpringBoot Redis 注解 攔截器來實(shí)現(xiàn)接口冪等性校驗(yàn)

    冪等性,?通俗的說就是一個(gè)接口,?多次發(fā)起同一個(gè)請求,?必須保證操作只能執(zhí)行一次 比如:訂單接口,?不能多次創(chuàng)建訂單 支付接口,?重復(fù)支付同一筆訂單只能扣一次錢 支付寶回調(diào)接口,?可能會(huì)多次回調(diào),?必須處理重復(fù)回調(diào) 普通表單提交接口,?因?yàn)榫W(wǎng)絡(luò)超時(shí)等原因多次點(diǎn)擊提

    2024年01月19日
    瀏覽(31)
  • kafka-保證數(shù)據(jù)不重復(fù)-生產(chǎn)者開啟冪等性和事務(wù)的作用?

    kafka-保證數(shù)據(jù)不重復(fù)-生產(chǎn)者開啟冪等性和事務(wù)的作用?

    適用于消息在寫入到服務(wù)器日志后,由于網(wǎng)絡(luò)故障,生產(chǎn)者沒有及時(shí)收到服務(wù)端的 ACK 消息,生產(chǎn)者誤以為消息沒有持久化到服務(wù)端,導(dǎo)致生產(chǎn)者重復(fù)發(fā)送該消息,造成了消息的重復(fù)現(xiàn)象,而冪等性就是為了解決該問題。 通過3個(gè)值的唯一性去重: PID:生產(chǎn)者ID 分區(qū)號(hào) seq:單

    2024年02月14日
    瀏覽(17)
  • Java接口冪等性,如何重試?

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

    當(dāng)我們寫好一個(gè)項(xiàng)目時(shí),有沒有深深的思考過,如何處理接口冪等性問題呢?今天我們以屈原這句著名詩句“路漫漫其修遠(yuǎn)兮,吾將上下而求索”的精神來探索一下這個(gè)問題。 冪等性:簡單來說就是一個(gè)操作多次執(zhí)行的結(jié)果和一次執(zhí)行產(chǎn)生的結(jié)果一致。 答:在計(jì)算機(jī)應(yīng)用中

    2024年02月10日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包