一个场景:
防止用户短时间内访问网站,造成压力,如果10秒内请求数大于100, 就拒绝请求
一个key 为 a1 ,设置10秒后过期, 在这期间, 用户每访问一次, a1 就用incr来加1
然后,在a1 到期的那一瞬间之后, 有个用户访问了, 刚好 执行到了 incr a1 , 结果a1 又存在了, 而且还没有了过期时间,
这种情况, 就遇到大麻烦了, 请问有办法解决吗
一个场景:
防止用户短时间内访问网站,造成压力,如果10秒内请求数大于100, 就拒绝请求
一个key 为 a1 ,设置10秒后过期, 在这期间, 用户每访问一次, a1 就用incr来加1
然后,在a1 到期的那一瞬间之后, 有个用户访问了, 刚好 执行到了 incr a1 , 结果a1 又存在了, 而且还没有了过期时间,
这种情况, 就遇到大麻烦了, 请问有办法解决吗
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
2 回答867 阅读
1 回答866 阅读
1 回答712 阅读
自问自答吧, 目前没有很好的解决方案,如果大家有更好的方案,欢迎留言
如下几个方案可参考
https://blog.csdn.net/jingzi1...
https://segmentfault.com/q/10...