冪等性問題
【*】什麼是冪等性
首先冪等性是數學中的概念:一個函式執行多次,返回結果相同就達到了冪等性的要求 f(f(x)) = f(x)
【*】軟體開發中的冪等性
- 什麼情況下會產生冪等性
在業務上對某一事件進行多次處理,但是預期只想處理一次,例如支付過程中,購買一件商品,由於網路原因第一次沒有支付成功,使用者又重新整理進行重複請求,此時使用者的主觀想法當然不是想要購買多次,此時如果發生了兩次扣款,就產生了冪等性的問題。
- 在CURD過程當中的冪等性
- select和delete:查詢天然支援冪等
- update:可能不冪等,也可能冪等
- 冪等:修改的最終值固定,例如進行狀態修改,將可用的狀態修改成不可用,進行多次修改,結果都是由可用變成不可用
- 不冪等:修改的最終值不固定,例如支付扣款,賬戶餘額1000元,購買了200元的商品,餘額就是1000-200,發生多次就變成了重複扣款
- insert:天然不冪等
- 多次新增必然會每次資料都會變多,必然結果發生了變化,所以不冪等
【*】冪等性問題怎樣解決
- 唯一索引
新建一張去重表,裡面可以只放一個唯一索引欄位
例如訂單冪等性:不能重複生成訂單,訂單號可以使用一些特定的規則進行生成(注意保證訂生成單號的唯一性),新建一張表,只儲存訂單號,並將其設定為唯一索引,生成訂單方法,在真正呼叫生成訂單的業務邏輯之前,需要首先在訂單去重表中,
- 狀態標識
- 版本號
- token令牌
相關文章
- 聊聊開發中冪等性問題
- 【Java面試】什麼是冪等?如何解決冪等性問題?Java面試
- 【工作篇】介面冪等問題探究
- 架構師必備:系統性解決冪等問題架構
- 什麼是冪等性?四種介面冪等性方案詳解!
- 分散式之介面冪等性分散式
- 介面冪等性如何實現?
- 介面冪等性解決方案
- 答面試官問:怎麼實現介面冪等性面試
- 如何保證介面的冪等性?
- gRPC重試與介面冪等性RPC
- [java]如何裂解RESTful的冪等性JavaREST
- 大廠面試Kafka,一定會問到的冪等性面試Kafka
- 騰訊二面:如何保證介面冪等性?高併發下的介面冪等性如何實現?
- 分散式冪等問題解決方案三部曲分散式
- 02 RESTFul介面和HTTP的冪等性分析RESTHTTP
- 分散式系統中介面的冪等性分散式
- Rabbitmq消費者冪等性(不重複消費)MQ
- 基於Redis&MySQL介面冪等性設計RedisMySql
- 介面服務中的冪等性設計和防重保證,詳細分析冪等性的幾種實現方法
- 高併發下資料冪等問題的9種解決方案
- HTTP有哪些保證冪等性和安全性的方法? - mscharhagHTTP
- 高併發下的介面冪等性解決方案!
- 什麼是分散式系統中的冪等性分散式
- 高併發下如何保證介面的冪等性?
- 程式設計思想之冪等性 | 程式設計之道程式設計
- RabbitMQ 冪等性概念及業界主流解決方案MQ
- Rabbit MQ 怎麼保證可靠性、冪等性、消費順序?MQ
- 冪等最佳實踐
- 什麼是冪等
- 短影片整套原始碼,如何實現冪等性校驗?原始碼
- MQ系列10:如何保證訊息冪等性消費MQ
- 高併發核心技術 - 冪等性 與 分散式鎖分散式
- 4次等冪和最少項至今還未解決的一個問題
- Filter+Redis解決專案之間呼叫的冪等性FilterRedis
- 如何使POST請求具有冪等性防止重複提交 - mscharhag
- Elasticjob執行job冪等AST
- 冪等設計詳解