我使用INCR并EXPIRE实现速率限制(对于下面的示例,每分钟只允许5个请求):
if EXISTS counter
count = INCR counter
else
EXPIRE counter 60
count = INCR counter
if count > 5
print "Exceeded the limit"
Run Code Online (Sandbox Code Playgroud)
但是存在一个问题,即人们可以在最后一秒发送5个请求,在下一分钟发送5个其他请求,换句话说,在两秒钟内发出10个请求.
有没有更好的方法来避免这个问题?
更新:我刚才提出了一个想法:使用列表来实现它.
times = LLEN counter
if times < 5
LPUSH counter now()
else
time = LINDEX counter -1
if now() - time < 60
print "Exceeded the limit"
else
LPUSH counter now()
LTRIM counter 5
Run Code Online (Sandbox Code Playgroud)
这是一个好方法吗?
当用户输入错误密码时,从安全角度来看,以下两条错误消息之间是否存在任何差异?
错误的用户名或密码.
密码错误.
例如,当您在Gmail.com上输入错误的密码时,它会告诉您"您输入的用户名或密码不正确".出于安全考虑,有任何考虑因素吗?我认为错误消息:"您输入的密码不正确"对用户来说更清楚了,而且,更方便的是,检查Gmail.com上是否存在用户名非常容易:只需点击"无法访问您的帐户?" 并输入用户名.如果用户名不存在,它会告诉你.
使用redis-cli进入“pub/sub”模式后,我找不到任何方法订阅其他频道。例如:
$ redis-cli
redis> SUBSCRIBE channel:1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
Run Code Online (Sandbox Code Playgroud)
当我按 Ctrl-C 时,redis-cli 将退出,而不是“pub/sub”模式。有谁知道如何解决这个问题?
Apple.com始终首先显示标准图像,然后使用javascript加载视网膜图像(如果设备支持视网膜).
我想知道苹果为什么不直接使用CSS媒体查询来减少HTTP请求?