redis过期后1毫秒,执行了incr,key又复活了,但过期时间没有了,如何避免这种情况呢?

一个场景:
防止用户短时间内访问网站,造成压力,如果10秒内请求数大于100, 就拒绝请求

一个key 为 a1 ,设置10秒后过期, 在这期间, 用户每访问一次, a1 就用incr来加1

然后,在a1 到期的那一瞬间之后, 有个用户访问了, 刚好 执行到了 incr a1 , 结果a1 又存在了, 而且还没有了过期时间,

这种情况, 就遇到大麻烦了, 请问有办法解决吗

阅读 7.1k
2 个回答
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