小编lui*_*uin的帖子

如何使用Redis实现速率限制

我使用INCREXPIRE实现速率限制(对于下面的示例,每分钟只允许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)

这是一个好方法吗?

rate-limiting redis

20
推荐指数
2
解决办法
1万
查看次数

当用户输入错误的密码时,哪个错误消息更好?

当用户输入错误密码时,从安全角度来看,以下两条错误消息之间是否存在任何差异?

错误的用户名或密码.

密码错误.

例如,当您在Gmail.com上输入错误的密码时,它会告诉您"您输入的用户名或密码不正确".出于安全考虑,有任何考虑因素吗?我认为错误消息:"您输入的密码不正确"对用户来说更清楚了,而且,更方便的是,检查Gmail.com上是否存在用户名非常容易:只需点击"无法访问您的帐户?" 并输入用户名.如果用户名不存在,它会告诉你.

security passwords login

10
推荐指数
4
解决办法
4万
查看次数

进入“pub/sub”模式后如何发出“订阅”命令?

使用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”模式。有谁知道如何解决这个问题?

publish-subscribe redis

5
推荐指数
1
解决办法
7059
查看次数

为什么apple.com使用javascript动态加载视网膜图像而不是媒体查询?

Apple.com始终首先显示标准图像,然后使用javascript加载视网膜图像(如果设备支持视网膜).

我想知道苹果为什么不直接使用CSS媒体查询来减少HTTP请求?

javascript css retina-display media-queries

3
推荐指数
1
解决办法
1022
查看次数