使用redis實現接口冪等性


1、概念

冪等性, 通俗的說就是一個接口, 多次發起同一個請求, 必須保證操作只能執行一次

比如:

訂單接口, 不能多次創建訂單

支付接口, 重復支付同一筆訂單只能扣一次錢

支付寶回調接口, 可能會多次回調, 必須處理重復回調

普通表單提交接口, 因為網絡超時等原因多次點擊提交, 只能成功一次

等等

2、常用解決方案

唯一索引,防止新增臟數據

token機制,防止頁面重復提交

悲觀鎖,獲取數據的時候加鎖(鎖表或鎖行)

樂觀鎖,基於版本號version實現, 在更新數據那一刻校驗數據

分布式鎖, redis(jedis、redisson)或zookeeper實現

狀態機,狀態變更, 更新數據時判斷狀態

3、實現思路

為需要保證冪等性的每一次請求創建一個唯一標識token, 先獲取token, 並將此token存入redis, 請求接口時, 將此token放到header或者作為請求參數請求接口, 后端接口判斷redis中是否存在此token:

如果存在, 正常處理業務邏輯, 並從redis中刪除此token, 那么, 如果是重復請求, 由於token已被刪除, 則不能通過校驗, 返回請勿重復操作提示。

如果不存在, 說明參數不合法或者是重復請求, 返回提示即可。

4、代碼實現

(1)redis工具類

(2)冪等性的接口自定義注解

(3)冪等性攔截器方法

(4)service方法

 

本文轉自:https://blog.csdn.net/zhenwei1994/article/details/94359724


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM