分布式的幾件小事(七)分布式系統接口的冪等性如何保證


1.冪等性

所謂冪等性,就是說一個接口,多次發起同一個請求,你這個接口得保證結果是准確的,比如不能多扣款,不能多插入一條數據,不能將統計值多加了1。這就是冪等性。

2.如何保證冪等性

①對於每個請求必須有一個唯一的標志,比如訂單支付請求,必須要包含訂單的id,一個id只能支付一次。

②每次處理完請求之后,必須要有一個記錄標識這個請求已經處理過了,比如最常見的是在mysql中記錄一個狀態,比如支付前先插入一條這個訂單的支付流水,而且支付流水采用唯一約束,只有插入成功才進行支付。

③每次接受到請求之后需要先判斷之前是否已經處理過,比如一條訂單已經支付了,那么就一定會有支付流水,如果存在就表示已經支付過了。

在實際操作中,可以結合自己的業務,比如說用redis用orderId作為唯一鍵。只有成功插入這個支付流水,才可以執行實際的支付扣款。你就可以寫一個標識到redis里面去,set order_id payed,下一次重復請求過來了,先查redis的order_id對應的value,如果是payed就說明已經支付過了,你就別重復支付了。


免責聲明!

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



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