最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

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

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

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

請求方式是否冪等對應(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’);

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

常用的解決方式

大概主流的解決方案:

  • token機制(前端帶著在請求頭上帶著標(biāo)識,后端驗證)

  • 加鎖機制

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

  • redis的set機制

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

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

代碼實現(xiàn)

  • 自定義注解Idempotent

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

  • 定義IdempotentAspect的切片

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

  • 冪等性處理類IdempotentProcessor

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

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

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

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

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

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

控制臺的輸出如下:

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

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

相關(guān)文章

  • Redis 實現(xiàn)“附近的人”功能

    Redis 實現(xiàn)“附近的人”功能

    Redis基于geohash和有序集合提供了地理位置相關(guān)功能。這篇文章主要介紹了Redis 實現(xiàn)“附近的人”功能,需要的朋友可以參考下
    2019-11-11
  • Redis 高可用與集群原理深度解析

    Redis 高可用與集群原理深度解析

    Redis高可用機制涵蓋主從復(fù)制、哨兵自動故障轉(zhuǎn)移及Cluster集群分片與高可用,依賴Gossip協(xié)議實現(xiàn)節(jié)點通信與狀態(tài)同步,源碼解析了故障轉(zhuǎn)移流程,為后續(xù)持久化內(nèi)容奠定基礎(chǔ),本文給大家介紹Redis高可用與集群原理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • redis之?dāng)?shù)據(jù)過期清除策略、緩存淘汰策略詳解

    redis之?dāng)?shù)據(jù)過期清除策略、緩存淘汰策略詳解

    這篇文章主要介紹了redis之?dāng)?shù)據(jù)過期清除策略、緩存淘汰策略的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    這篇文章主要介紹了springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于使用IDEA的springboot框架往Redis里寫入數(shù)據(jù)亂碼問題

    關(guān)于使用IDEA的springboot框架往Redis里寫入數(shù)據(jù)亂碼問題

    這篇文章主要介紹了用IDEA的springboot框架往Redis里寫入數(shù)據(jù)亂碼問題,本文給大家分享解決方法通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 使用Redis實現(xiàn)延時任務(wù)的解決方案

    使用Redis實現(xiàn)延時任務(wù)的解決方案

    這篇文章主要介紹了使用Redis實現(xiàn)延時任務(wù)的解決方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 大白話講解調(diào)用Redis的increment失敗原因及推薦使用詳解

    大白話講解調(diào)用Redis的increment失敗原因及推薦使用詳解

    本文主要介紹了調(diào)用Redis的increment失敗原因及推薦使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Redis數(shù)據(jù)一致性問題的三種解決方案

    Redis數(shù)據(jù)一致性問題的三種解決方案

    Redis(Remote?Dictionary?Server?),是一個高性能的基于Key-Value結(jié)構(gòu)存儲的NoSQL開源數(shù)據(jù)庫,大部分公司采用Redis來實現(xiàn)分布式緩存,用來提高數(shù)據(jù)查詢效率,本文就給大家介紹三種Redis數(shù)據(jù)一致性問題的解決方案,需要的朋友可以參考下
    2023-07-07
  • Redis設(shè)置密碼以及設(shè)置后不生效的解決過程

    Redis設(shè)置密碼以及設(shè)置后不生效的解決過程

    這段描述主要講解了如何修改Redis配置文件以設(shè)置自定義密碼,并強調(diào)了在啟動Redis時需使用配置文件的重要性,通過修改`redis.windows.conf`中的`requirepass`參數(shù)并重啟Redis服務(wù),可以實現(xiàn)自定義密碼設(shè)置
    2026-05-05
  • 淺談Redis緩存雪崩解決方案

    淺談Redis緩存雪崩解決方案

    本文主要介紹了Redis緩存雪崩解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論

化隆| 资中县| 田东县| 淳安县| 江北区| 紫云| 东辽县| 左云县| 兴和县| 凉山| 永胜县| 宽甸| 呼伦贝尔市| 囊谦县| 平凉市| 贡嘎县| 蒙自县| 郁南县| 商河县| 方正县| 孟连| 富源县| 开鲁县| 陇川县| 桃江县| 商河县| 固安县| 开阳县| 永定县| 南华县| 怀远县| 遵化市| 郸城县| 平定县| 无为县| 阿瓦提县| 云南省| 五指山市| 河东区| 沂南县| 五华县|