接口冪等性就是用戶對於同一操做發起的一次請求或者屢次請求的結果是一致的,不會由於屢次點擊而產生了反作用。舉個最簡單的例子,那就是支付,用戶購買商品後支付,支付扣款成功,可是返回結果的時候網絡異常,此時錢已經扣了,用戶再次點擊按鈕,此時會進行第二次扣款,返回結果成功,用戶查詢餘額返發現多扣錢了,流水記錄也變成了兩條...,這就沒有保證接口的冪等性redis
核心是判斷兩次請求是否爲同一操做。一般方法是解析請求全部參數,判斷參數是否徹底一致。若是兩次參數同樣,則是重複提交。還有是經過惟一索引來判斷,如發貨操做,一筆訂單隻能發貨一次。因此能夠經過惟一訂單號來判斷兩次是否爲重複提交。markdown
場景:限制單個用戶每一個小時只能訪問某個接口100次網絡
實現:將用戶的每次訪問時間記錄在redis中,每次訪問獲取第100前的訪問時間。若是未能獲取到訪問時間,則說明該用戶未訪問100次。若是獲取到時間,則判斷該時間是否在一小時內,若是是在一小時內,則該用戶須要限流,不能再訪問了。若是不在一小時內,則從redis移除該訪問記錄。spa