面試官扎心一問 防止重複請求提交,有什麼方案?

2022-07-05 22:51:16 字數 1227 閱讀 6266

在平常開發中,我們經常會面對防止重複請求的問題。當服務端對於請求的響應涉及資料的修改,或狀態的變更時,可能會造成極大的危害。重複請求的後果在交易系統、售後維權,以及支付系統中尤其嚴重。但是很多時候,都是指望著前端來限制,比如提交之後,按鈕diseabled之類的,其實這些都是不靠譜的。關鍵時候還是需要後端來校驗。

1、基於快取資料狀態的驗證

redis儲存查詢輕量快速。在request進來的時候,可以先記錄在快取中。後續進來的request每次進行驗證。整個流程處理完成,清除快取。

if (!cacheextension.getinstance().addunique($"

_unique

", 1, datetimeoffset.now.adddays(365

)))

if (!string

.isnullorempty(uniquekey))

return responseresult.ok();

2、利用唯一索引機制的驗證

需要原子性操作,想到了資料庫的唯一索引。新建乙個表,每次request進來則往表裡面插入資料, 操作完成後,刪除此條記錄。

3、基於快取的計數器驗證

由於資料庫的操作比較消耗效能,了解到redis的計數器也是原子性操作。果斷採用計數器。既可以提高效能,還不用儲存,而且能提公升qps的峰值。 每次request進來則新建乙個以orderid為key的計數器,然後+1。如果》1(不能獲得鎖): 說明有操作在進行,刪除。如果=1(獲得鎖): 可以操作。

redis> set test 20

okredis>incr test

(integer)

21redis>get test # 數字值在 redis 中以字串的形式儲存"21

"//獲取指定的所有計數器

hgetall counter:user:

//獲取指定的指定計數器

hmget counter:user: praisecnt hostcnt

//指定點讚數+1

hincrby counter:user: praisecnt

面試官最常問的問題總結(一)

ps 作為面試官或應聘者,都應該了解了解的問題,不知道能不能稱之為 面試模式 1 請你自我介紹一下你自己?2 你覺得你個性上最大的優點是什麼?3 說說你最大的缺點?4 你對加班的看法?回答樣本 如果是工作需要我會義不容辭加班,我現在單身,沒有任何家庭負擔,可以全身心的投入工作。但同時,我也會提高工作...

面試官常問的集合框架問題(一)

有關集合框架問題 一 list 集合 1 迭代器的remove方法與集合的remove的區別?只需要了解迭代器在記憶體的執行 指標 迭代器與集合是兩個物件,如果說在迭代器中呼叫集合中的remove方法,會報currentmodifyexception錯誤。2 array與arraylist的有何區別...

面試最後我一般會問面試官什麼問題

找工作是乙個相互選擇的過程,從龐大的招聘資訊當中,我們選擇了自己中意的公司 職位,投簡歷,然後接到面試通知,一路過關斬將到了最後環節,面試官一般會問你有什麼問題要問我的嗎?我個人的經驗是在面試前,我會先對這家公司進行一些初步的了解,包括成立時間 公司規模 主營業務 怕來不了多久就倒閉了 位置 看是否...