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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进