使用redis实现访问频率限制

1,060 阅读1分钟

问题:如何使用限制一个用户一分钟访问10次这个接口?

思路:当用户访问这个接口将根据用户的ip将用户访问时间Lpush到list中,如果list长度小于10,可以继续向里面push数据,否则取出ip最后一次访问时间,如果这个时间和当前时间相比小于60s,将可以push进去数据,并且清空前面的数据。 伪代码:

listLength = LLEN(user.ip)
if listLength > 10:
	LPUSH user.ip , now()
else:
	time = LINDEX user.ip , -1
    if now() - time < 60:
    	print "访问频率过高"
    else:
    	LPUSH user.ip , now()
        LTRIM user.ip, 0, 9