欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Redis如何保證接口的冪等性

 更新時(shí)間:2023年11月14日 11:26:33   作者:shigen01  
如何防止接口中同樣的數(shù)據(jù)提交,以及如何保證消息不被重復(fù)消費(fèi),這些都是shigen在學(xué)習(xí)的過(guò)程中遇到的問(wèn)題,今天,趁著在學(xué)習(xí)redis的間隙,我寫了一篇文章進(jìn)行簡(jiǎn)單的實(shí)現(xiàn),需要的朋友可以參考下

背景

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

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

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

請(qǐng)求方式是否冪等對(duì)應(yīng)的sql案例
getselect * from user;
putupdate user set name=‘shigen’ where id =10001;
deletedelete from user where id = 10002;
Postinsert into user (id, name) values(10002, ‘shigen’);

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

常用的解決方式

大概主流的解決方案:

  • token機(jī)制(前端帶著在請(qǐng)求頭上帶著標(biāo)識(shí),后端驗(yàn)證)

  • 加鎖機(jī)制

    • 數(shù)據(jù)庫(kù)悲觀鎖(鎖表)
    • 數(shù)據(jù)庫(kù)樂(lè)觀鎖(version號(hào)進(jìn)行控制)
    • 業(yè)務(wù)層分布式鎖(加分布式鎖redisson)
  • 全局唯一索引機(jī)制,ID不能重復(fù)

  • redis的set機(jī)制

  • 前端按鈕加限制,類似于vue的v-once指令,但前提是用戶不刷新頁(yè)面

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

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

  • 自定義注解Idempotent

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

  • 定義IdempotentAspect的切片

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

  • 冪等性處理類IdempotentProcessor

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

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

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

采用的是get請(qǐng)求測(cè)試,是為了方便。post請(qǐng)求的使用也和案例一樣。

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

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

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

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

到此這篇關(guān)于詳解Redis如何保證接口的冪等性的文章就介紹到這了,更多相關(guān)Redis保證接口的冪等性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • K8S redis 部署的項(xiàng)目實(shí)踐

    K8S redis 部署的項(xiàng)目實(shí)踐

    本文主要介紹了K8S redis 部署的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Redis中管道操作的項(xiàng)目實(shí)踐

    Redis中管道操作的項(xiàng)目實(shí)踐

    Redis管道操作通過(guò)將多個(gè)命令一次性發(fā)送到服務(wù)器,減少了網(wǎng)絡(luò)往返次數(shù),本文就來(lái)介紹一下Redis的管道操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Redis進(jìn)行相關(guān)優(yōu)化詳解

    Redis進(jìn)行相關(guān)優(yōu)化詳解

    這篇文章主要介紹了Redis進(jìn)行相關(guān)優(yōu)化,Redis在項(xiàng)目中進(jìn)行廣泛使用,那么在日常的開發(fā)過(guò)程中,我們?cè)谑褂肦edis的過(guò)程中需要注意那些呢?本文將從三個(gè)維度來(lái)講解如何進(jìn)行Redis的優(yōu)化
    2022-08-08
  • Redis源碼閱讀:Redis字符串SDS詳解

    Redis源碼閱讀:Redis字符串SDS詳解

    這篇文章主要介紹了Redis源碼閱讀:Redis字符串SDS,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺談Redis緩沖區(qū)機(jī)制

    淺談Redis緩沖區(qū)機(jī)制

    本文主要介紹淺談Redis緩沖區(qū)機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Redis的持久化詳解

    Redis的持久化詳解

    Redis是一個(gè)基于內(nèi)存的數(shù)據(jù)庫(kù),它的數(shù)據(jù)是存放在內(nèi)存中,內(nèi)存有個(gè)問(wèn)題就是關(guān)閉服務(wù)或者斷電會(huì)丟失,Redis的數(shù)據(jù)也支持寫到硬盤中,這個(gè)過(guò)程就叫做持久化,文中有詳細(xì)的圖介紹,需要的朋友可以參考下
    2023-06-06
  • Redis 鍵值設(shè)計(jì)使用總結(jié)

    Redis 鍵值設(shè)計(jì)使用總結(jié)

    這篇文章主要介紹了Redis鍵值設(shè)計(jì)的使用總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文帶你搞懂Redis Stream的6種消息處理模式

    一文帶你搞懂Redis Stream的6種消息處理模式

    Redis 5.0版本引入的Stream數(shù)據(jù)類型,為Redis生態(tài)帶來(lái)了強(qiáng)大而靈活的消息隊(duì)列功能,本文將為大家詳細(xì)介紹Redis Stream的6種消息處理模式,感興趣的小伙伴可以了解一下
    2025-05-05
  • Redis實(shí)現(xiàn)每周熱評(píng)的項(xiàng)目實(shí)踐

    Redis實(shí)現(xiàn)每周熱評(píng)的項(xiàng)目實(shí)踐

    實(shí)時(shí)統(tǒng)計(jì)和展示熱門內(nèi)容是一種常見的需求,本文主要介紹了Redis實(shí)現(xiàn)每周熱評(píng)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 基于redis分布式鎖實(shí)現(xiàn)秒殺功能

    基于redis分布式鎖實(shí)現(xiàn)秒殺功能

    這篇文章主要為大家詳細(xì)介紹了基于redis分布式鎖實(shí)現(xiàn)秒殺功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評(píng)論