方法冪等性控制

2021-10-23 00:11:30 字數 1340 閱讀 7028

方法冪等性控制

冪等http/1.1中對冪等性的定義是:一次和多次請求某乙個資源對於資源本身應該具有同樣的結果(網路超時等問題除外)。也就是說,其任意多次執行對資源本身所產生的影響均與一次執行的影響相同

冪等不僅僅只是一次(或多次)請求對資源沒有***(比如查詢資料庫操作,沒有增刪改,因此沒有對資料庫有任何影響)。

​冪等還包括第一次請求的時候對資源產生了***,但是以後的多次請求都不會再對資源產生***。​​

網路超時等問題,不是冪等的討論範圍。

http方法

http get           獲取資源,支援冪等

http post     新增    

http put           更新 (固定值:冪等,

更新變數增加值:update version=version+1,不支援冪等)

http delete       刪除,冪等

保證冪等性的核心:

1)對於每個請求必須有乙個唯一的標識。

2)每次處理完請求之後,必須有乙個記錄標識這個請求處理過了。

3)每次接收請求需要進行判斷之前是否處理過的邏輯處理。

常見解決方案

1)業務表內唯一索引

如果要對建立銷售出庫單的介面保證冪等性,也就是說網路超時,重複呼叫的時候,保證乙個訂單只能有乙個對應的銷售出庫單。針對銷售出庫單的表的訂單id,建立乙個唯一索引,你如果介面被重試,同乙個訂單建立乙個銷售出庫單的話,一定會違反唯一索引,那麼此時資料庫會報錯。

2)業務表內狀態機

修改訂單狀態,比如說將訂單狀態修改為待發貨的時候,update order set status = 「待發貨」 where status = 「待付款」 and id = 1,訂單的狀態其實就變為了「待發貨」。假如說id = 1的訂單介面重複呼叫,又要執行一次這個操作的話就不會生效。通常會去判斷一下的,當前是否處於某個狀態,然後才能流轉到下乙個狀態。 (狀態為待付款的才能流轉到待發貨)

3)基於版本號的更新

idname

ageversion

1lisi331

如果要呼叫這個介面,更新他的這個年齡,先得查一下他的版本號是多少。然後傳遞引數進行操作。先查詢在更新

在介面裡保證分布式介面的冪等性:

update user set age=21, version=version+1 where id=1 and version=1

4)新建操作記錄表

請求時生成唯一引數idno,如果操作成功,往記錄表中插入一條記錄,第二次請求的時候根據唯一引數查詢資料庫是否存在,如果存在則不操作。

冪等性和實現方法

冪等性和實現方法 tommwq.tech blog 如果乙個操作重複執行多次,其效果 不考慮操作時間 和只執行一次是一樣的,那麼這個操作就叫做是冪等 idempotent 的。乍看起來,冪等操作似乎沒什麼用處,畢竟只有第一次執行有效。但如果在系統設計中考慮到 失敗 場景的話,冪等操作是非常重要的。因...

原子性 冪等性

原子性 如果這個操作所處的層 layer 的更高層不能發現其內部實現與結構,那麼這個操作是乙個原子 atomic 操作。原子操作可以是乙個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而只執行其中的一部分。將整個操作視作乙個整體是原子性的核心特徵。冪等性 再簡單一點說,在乙個業務...

冪等性學習及介面的冪等性

冪等性學習 一 什麼是冪等性 在這裡需要有以下幾個問題需要注意 2 冪等性不僅僅只是一次或者多次請求的時候對資源沒有 比如根據id對資料庫的查詢操作,此操作對資料庫沒有增刪改,所以多次查詢操作對資料庫結果是沒有任何影響的 3 冪等性還包括了第一次請求資源的時候,對資源產生了 但是在以後多次同樣的請求...