冪等性 經典分布式鎖應用分析

2021-10-09 06:50:57 字數 1008 閱讀 4523

重複提交:重複提交是在第一次請求成功的情況下,人為的進行多次操作,從而導致不滿足冪等性要求的服務多次改變資料狀態。

冪等:更多使用的情況是第一次請求知道結果(比如常見的網路抖動導致連線超時)或者失敗異常情況下,發起多次請求的,其目的是多次確認第一次請求成功,卻不會因為多次請求而出現多次的狀態變化。

今天,專案遇到乙個問題。在乙個介面內,有段建立訂單的邏輯是:

id 自增

insert into pay_order values

(id, order_id, user_id, create_time)

;

在前端頁面抖動時,會多次呼叫介面,重複上述邏輯。最終導致這個訂單有多條記錄,引起一系列問題。

針對上述問題,將採用redis分布式鎖+mysqsl行鎖解決。

在邏輯前,設計乙個自動超時解鎖的redis鎖。這裡預設設定30秒內只有1個進來的服務能夠拿到鎖去執行建立訂單的邏輯。完成邏輯後,執行解鎖。

boolean lock = redistemplate.

execute

((connection)

-> connection

.set(key.

getbytes()

, value.

getbytes()

, expiration, redisstringcommands.setoption.

ifabsent()

),true);

while

(!lock)

查詢表是否有這個記錄,有就不執行邏輯中的影響語句insert into ***

select * from order_entity where order_id = # and user_id = #
涉及知識:

redis操作

鎖機制冪等性原理

分布式 冪等性

現在你的服務提供一些外部介面呼叫,然後你這個服務又是部署在多台機器上的,然後前端在操作的時候正好呼叫了請求,假如我們的業務功能是扣款,然後在負載均衡的時候你的請求被傳送到不同的機器上,所以你需要保證的就是同樣的一次請求只能成功一次,另外的需要丟棄調。那麼如何保證分布式環境下的冪等性呢?保證冪等性主要...

Redis分布式鎖實現資料寫入冪等性

flink時間視窗計算將計算結果寫入druid.io的拓補圖結構如下 flink從kafka消費資料,進行分別進行計量和及時的計算,最終將計算結果寫入到kafka,最終druid.io使用kafka inex service從kafka中拉取資料,將結果寫入到druid.io 在程式執行的過程中,由...

分布式系統冪等性詳解

冪等 idempotent idempotence 是乙個數學與計算機學概念,常見於抽象代數中。在程式設計中.乙個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式不會影響系統狀態,也不用擔心重複執行...