怎么保證介面的冪等性
前言
首先來說下冪等性這個概念吧,介面冪等性就是同一個介面多次呼叫的結果是一樣的,
場景:
1、form表單操作,因為網路原因或者客戶手快的原因連續點了好幾次,資料庫多了幾條不該有的資料,或者某個欄位的值修改結果跟逾期不符合,
2、第三方介面回呼 就拿支付回呼來說,通常我們會在回呼中更新下訂單,還有添加一些支付資訊等,多次呼叫會出現重復記錄,或者訂單某個欄位的更新錯誤,
上面的操作 總結下就是兩種
1、添加insert操作,會導致重復記錄
2、更新update操作,會導致資料更新錯誤
解決辦法:
1、insert操作如果提交的的欄位里有唯一欄位,那么加上唯一索引,
2、操作之前先去查一下這個表,update的話就根據id查這個表的狀態有沒有更新過,insert的話根據唯一性欄位查詢資料庫有沒有此記錄,如果有則不走insert和update直接回傳成功,
3、如果當前表除了主鍵沒有唯一欄位,并且是高并發的情況那么我們可以加鎖 樂觀鎖或者悲觀鎖(推薦樂觀鎖)
4,如果不光有高并發,而且是分布式的話可以用分布式鎖 如redis分布式鎖、zookeeper鎖等
本文只是簡單總結,勿噴,如有不對的地方寫出你的想法
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/277110.html
標籤:其他
下一篇:Lua開發-- table
