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

面試官扎心一問(wèn):防止重復(fù)請(qǐng)求提交,有什么方案?

開(kāi)發(fā) 前端
在平常開(kāi)發(fā)中,我們經(jīng)常會(huì)面對(duì)防止重復(fù)請(qǐng)求的問(wèn)題。當(dāng)服務(wù)端對(duì)于請(qǐng)求的響應(yīng)涉及數(shù)據(jù)的修改,或狀態(tài)的變更時(shí),可能會(huì)造成極大的危害。

[[383998]]

 本文轉(zhuǎn)載自微信公眾號(hào)「UP技術(shù)控」,作者 conan5566。轉(zhuǎn)載本文請(qǐng)聯(lián)系UP技術(shù)控公眾號(hào)。 conan5566  

背景

在平常開(kāi)發(fā)中,我們經(jīng)常會(huì)面對(duì)防止重復(fù)請(qǐng)求的問(wèn)題。當(dāng)服務(wù)端對(duì)于請(qǐng)求的響應(yīng)涉及數(shù)據(jù)的修改,或狀態(tài)的變更時(shí),可能會(huì)造成極大的危害。重復(fù)請(qǐng)求的后果在交易系統(tǒng)、售后維權(quán),以及支付系統(tǒng)中尤其嚴(yán)重。但是很多時(shí)候,都是指望著前端來(lái)限制,比如提交之后,按鈕diseabled之類(lèi)的,其實(shí)這些都是不靠譜的。關(guān)鍵時(shí)候還是需要后端來(lái)校驗(yàn)。

解決方式

1、基于緩存數(shù)據(jù)狀態(tài)的驗(yàn)證

Redis存儲(chǔ)查詢(xún)輕量快速。在request進(jìn)來(lái)的時(shí)候,可以先記錄在緩存中。后續(xù)進(jìn)來(lái)的request每次進(jìn)行驗(yàn)證。整個(gè)流程處理完成,清除緩存。

  1. if (!CacheExtension.getInstance().AddUnique($"{key}_unique", 1, DateTimeOffset.Now.AddDays(365))) 
  2.             { 
  3.                 LogExtention.getInstance().WriteCustomLogAsync(""""true"上批次還未執(zhí)行結(jié)束"); 
  4.                 return ResponseResult.FromError("上批次還未執(zhí)行結(jié)束!"); 
  5.             } 
  1. if (!string.IsNullOrEmpty(uniqueKey)) 
  2.             { 
  3.                 CacheExtension.getInstance().Remove(uniqueKey); 
  4.             } 
  5.             return ResponseResult.Ok(); 

2、利用唯一索引機(jī)制的驗(yàn)證

需要原子性操作,想到了數(shù)據(jù)庫(kù)的唯一索引。新建一個(gè)表,每次request進(jìn)來(lái)則往表里面插入數(shù)據(jù), 操作完成后,刪除此條記錄。

3、基于緩存的計(jì)數(shù)器驗(yàn)證

由于數(shù)據(jù)庫(kù)的操作比較消耗性能,了解到redis的計(jì)數(shù)器也是原子性操作。果斷采用計(jì)數(shù)器。既可以提高性能,還不用存儲(chǔ),而且能提升qps的峰值。 每次request進(jìn)來(lái)則新建一個(gè)以orderId為key的計(jì)數(shù)器,然后+1。如果>1(不能獲得鎖): 說(shuō)明有操作在進(jìn)行,刪除。如果=1(獲得鎖): 可以操作。

  1. redis> SET test 20 
  2. OK 
  3. redis> INCR test 
  4. (integer) 21 
  5. redis> GET test # 數(shù)字值在 Redis 中以字符串的形式保存 
  6. "21" 
  7.  
  8. //獲取指定的所有計(jì)數(shù)器 
  9. HGETALL counter:user:{userID}    
  10.  
  11. //獲取指定的指定計(jì)數(shù)器 
  12. HMGET counter:user:{userID}  praiseCnt hostCnt  
  13.  
  14. //指定點(diǎn)贊數(shù)+1 
  15. HINCRBY counter:user:{userID}   praiseCnt 

總結(jié)

1、c#本身有l(wèi)ock機(jī)制,單體模式可以使用。

2、但是考慮到我們的分布式部署,建議還是用緩存。在大并發(fā)的情況下,程序各種情況的發(fā)生。特別是涉及到金額操作。所以在大并發(fā)要互斥的情況下可以考慮2、3兩種方案。

 

責(zé)任編輯:武曉燕 來(lái)源: UP技術(shù)控
相關(guān)推薦

2020-10-21 18:42:39

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)查詢(xún)分頁(yè)查詢(xún)

2019-01-29 19:24:06

分庫(kù)分表數(shù)據(jù)庫(kù)

2020-06-22 07:47:46

提交面試官訂單

2010-08-23 15:06:52

發(fā)問(wèn)

2023-02-09 07:01:35

轉(zhuǎn)發(fā)重定向Java

2022-01-05 09:55:26

asynawait前端

2021-11-08 09:18:01

CAS面試場(chǎng)景

2023-06-05 07:57:53

Kafka消息事務(wù)消息

2021-12-25 22:31:10

MarkWord面試synchronize

2023-12-05 09:33:08

分布式事務(wù)

2025-04-01 00:00:00

項(xiàng)目CRUD單例模式

2024-03-08 07:53:19

LockMonitor線(xiàn)程

2024-01-11 08:12:20

重量級(jí)監(jiān)視器

2021-12-16 18:38:13

面試Synchronize

2021-01-06 05:36:25

拉鏈表數(shù)倉(cāng)數(shù)據(jù)

2021-05-27 05:37:10

HTTP請(qǐng)求頭瀏覽器

2021-12-20 10:30:33

forforEach前端

2021-07-06 07:27:45

React元素屬性

2023-02-17 08:10:24

2023-06-13 07:04:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本手机在线 | 国产激情小视频 | 成年女人免费v片 | 欧美日韩一区二区三区四区五区 | 久久精品亚洲精品国产欧美 | 欧美日韩专区 | 日韩欧美三级电影 | 国产免费一区二区三区 | 精品不卡| 久久精品国产久精国产 | 国产一区二区三区四区在线观看 | 亚洲人成人一区二区在线观看 | 国产精品久久久久久久久婷婷 | 欧美在线一区视频 | 日本网站免费观看 | 久久成人精品一区二区三区 | 国产在线精品一区二区 | 免费黄色在线 | 五月综合激情在线 | 国精产品一区一区三区免费完 | 日韩欧美一区在线 | 日本亚洲精品成人欧美一区 | 日本免费在线 | 免费在线看黄视频 | 五月天婷婷激情 | 黄色在线免费观看视频 | www视频在线观看 | 99久久视频 | 91精品久久久久久久久久 | 本道综合精品 | 99国内精品久久久久久久 | 久久久久久久国产精品视频 | 日韩精品一区二区三区在线观看 | 2019天天干夜夜操 | 国内精品视频在线 | 国产精品高潮呻吟久久av野狼 | 国产精品18久久久久久久 | 日韩欧美国产一区二区三区 | 国产不卡在线 | 中文在线а√在线8 | 色毛片|