鍍金池/ 問答/人工智能/ redis過期后1毫秒,執(zhí)行了incr,key又復(fù)活了,但過期時間沒有了,如何避

redis過期后1毫秒,執(zhí)行了incr,key又復(fù)活了,但過期時間沒有了,如何避免這種情況呢?

一個場景:
防止用戶短時間內(nèi)訪問網(wǎng)站,造成壓力,如果10秒內(nèi)請求數(shù)大于100, 就拒絕請求

一個key 為 a1 ,設(shè)置10秒后過期, 在這期間, 用戶每訪問一次, a1 就用incr來加1

然后,在a1 到期的那一瞬間之后, 有個用戶訪問了, 剛好 執(zhí)行到了 incr a1 , 結(jié)果a1 又存在了, 而且還沒有了過期時間,

這種情況, 就遇到大麻煩了, 請問有辦法解決嗎

回答
編輯回答
伐木累

自問自答吧, 目前沒有很好的解決方案,如果大家有更好的方案,歡迎留言

如下幾個方案可參考

https://blog.csdn.net/jingzi1...

https://segmentfault.com/q/10...

2017年4月23日 11:43
編輯回答
鐧簞噯
FUNCTION LIMIT_REQUEST_CALL(key):
current = GET(key)
IF current != NULL AND current > 100 THEN
    ERROR "too many requests"
ELSE
    value = INCR(key)
    IF value == 1 THEN
        EXPIRE(key,10)
    END
    PERFORM_API_CALL()
END
2017年10月4日 15:15