成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高并發下如何保證接口的冪等性?

開發 架構
冪等性就是同一個操作執行多次,產生的效果一樣。如http的get請求,數據庫的select請求就是冪等的,在分布式系統中,保證接口的冪等性非常重要,如提交訂單,扣款等接口都要保證冪等性,不然會造成重復創建訂單,重復扣款,那么如何保證接口的冪等性呢?

[[333765]]

介紹

冪等性就是同一個操作執行多次,產生的效果一樣。如http的get請求,數據庫的select請求就是冪等的

在分布式系統中,保證接口的冪等性非常重要,如提交訂單,扣款等接口都要保證冪等性,不然會造成重復創建訂單,重復扣款,那么如何保證接口的冪等性呢?

前端保證冪等性的方法

按鈕只能點擊一次

用戶點擊按鈕后將按鈕置灰,或者顯示loading狀態

RPG模式

即Post-Redirect-Get,當客戶提交表單后,去執行一個客戶端的重定向,轉到提交成功頁面。避免用戶按F5刷新導致的重復提交,也能消除按瀏覽器后退鍵導致的重復提交問題。目前絕大多數公司都是這樣做的,比如淘寶,京東等

后端保證冪等性的方法

使用唯一索引

對業務唯一的字段加上唯一索引,這樣當數據重復時,插入數據庫會拋異常

狀態機冪等

如果業務上需要修改訂單狀態,例如訂單狀態有待支付,支付中,支付成功,支付失敗。設計時最好只支持狀態的單向改變。這樣在更新的時候就可以加上條件,多次調用也只會執行一次。例如想把訂單狀態更新為支持成功,則之前的狀態必須為支付中

  1. update table_name set status = 支付成功 where status = 支付中 

樂觀鎖實現冪等

  1. 查詢數據獲得版本號
  2. 通過版本號去更新,版本號匹配則更新,版本號不匹配則不更新

-- 假如查詢出的version為1

  1. -- 假如查詢出的version為1 
  2. select version from table_name where userid = 10; 
  3. -- 給用戶的賬戶加10 
  4. update table_name set money = money -10, version = version + 1 where userid = 10 and version = 1 

也可以通過條件來實現樂觀鎖,如庫存不能超賣,數量不能小于0

  1. update table_name set num = num - 10 where num - 10 >= 0 

防重表

增加一個防重表,業務唯一的id作為唯一索引,如訂單號,當想針對訂單做一系列操作時,可以向防重表中插入一條記錄,插入成功,執行后續操作,插入失敗,則不執行后續操作。本質上可以看成是基于MySQL實現的分布式鎖。根據業務場景決定執行成功后,是否刪除防重表中對應的數據

分布式鎖實現冪等

執行方法時,先根據業務唯一的id獲取分布式鎖,獲取成功,則執行,失敗則不執行。分布式鎖可以基于redis,zookeeper,mysql來實現,分布式鎖的細節就不介紹了

select+insert

先查詢一下有沒有符合要求的數據,如果沒有再執行插入。沒有并發的系統中可以保證冪等性,高并發下不要用這種方法,也會造成數據的重復插入。我一般做消息冪等的時候就是先select,有數據直接返回,沒有數據加分布式鎖進行insert操作

全局唯一號實現冪等

 

通過source(來源)+ seq(序列號)來判斷請求是否重復,重復則直接返回請求重復提交,否則執行。如當多個三方系統調用服務的時候,就可以采用這種方式

本文轉載自微信公眾號「Java識堂」,可以通過以下二維碼關注。轉載本文請聯系Java識堂公眾號。

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2025-02-26 08:20:18

2021-03-28 09:45:05

冪等性接口數據

2024-03-13 15:18:00

接口冪等性高并發

2021-04-14 17:18:27

冪等性數據源MySQL

2021-01-18 14:34:59

冪等性接口客戶端

2023-09-01 15:27:31

2024-11-26 07:29:57

高并發線程安全

2022-03-22 07:57:42

Java多線程并發

2023-10-26 07:32:42

2024-07-10 12:23:10

2022-06-12 06:45:26

高并發防重

2020-10-18 07:25:55

MQ消息冪等架構

2014-08-08 13:30:44

Nginx

2013-01-30 10:12:24

NginxNginx優化高并發

2024-06-07 09:06:36

2025-01-20 10:22:23

2021-01-13 11:23:59

分布式冪等性支付

2024-01-10 08:01:55

高并發場景悲觀鎖

2025-02-20 00:01:00

2025-02-23 08:00:00

冪等性Java開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久国产一区 | 欧美激情综合色综合啪啪五月 | 亚洲自拍偷拍免费视频 | 欧美视频在线播放 | 国产日韩精品视频 | 欧美11一13sex性hd | 在线观看特色大片免费网站 | 中文字幕高清 | 国产精品久久7777777 | 欧美一区二区三区免费电影 | 亚洲高清网 | 一区二区三区高清不卡 | 久久久久久国产一区二区三区 | 色婷婷久久久久swag精品 | 99久久精品国产一区二区三区 | 成人免费看 | 伊人伊人 | 婷婷久久综合 | 中文字幕在线观看 | 99热这里有精品 | 国产一级一级毛片 | 国产视频导航 | 成人二区| 中文字幕在线视频一区二区三区 | 9久9久9久女女女九九九一九 | 亚洲精品第一页 | 精品国产乱码久久久久久闺蜜 | 国产欧美日韩精品一区 | 毛片视频网址 | 91日韩在线 | 精品亚洲二区 | 九九热精品在线 | 黄色网页在线 | 在线精品一区二区 | 日韩不卡一区二区 | 超碰日本| 在线观看免费福利 | 中文字幕在线看 | 91九色在线观看 | 免费看一区二区三区 | 男女羞羞视频免费 |