1.冪等性
所謂冪等性,就是說一個接口,多次發起同一個請求,你這個接口得保證結果是准確的,比如不能多扣款,不能多插入一條數據,不能將統計值多加了1。這就是冪等性。
2.如何保證冪等性
①對於每個請求必須有一個唯一的標志,比如訂單支付請求,必須要包含訂單的id,一個id只能支付一次。
②每次處理完請求之后,必須要有一個記錄標識這個請求已經處理過了,比如最常見的是在mysql中記錄一個狀態,比如支付前先插入一條這個訂單的支付流水,而且支付流水采用唯一約束,只有插入成功才進行支付。
③每次接受到請求之后需要先判斷之前是否已經處理過,比如一條訂單已經支付了,那么就一定會有支付流水,如果存在就表示已經支付過了。
在實際操作中,可以結合自己的業務,比如說用redis用orderId作為唯一鍵。只有成功插入這個支付流水,才可以執行實際的支付扣款。你就可以寫一個標識到redis里面去,set order_id payed,下一次重復請求過來了,先查redis的order_id對應的value,如果是payed就說明已經支付過了,你就別重復支付了。
