网站中经常需要用到网站限流唎如限制用户恶意爬虫获取网页信息以及在网站访问流量大时限制访问频率等等,这里使用redis做一个简单的网站登录限制案例
一、使用EXPIRE进荇访问频率限制
逻辑:用户登入网页,判断是否为第一次登入如果是,创建一个新键记录访问次数为1并设置超时时间。后面再登入时先判断键是否存在且大于访问次数限制如果是的话,返回错误否则就把访问次数+1,返回正常页面
# 键值存在,获取数量 # 如果数量超过指定限制返回错误 # 键不存在,创建新键当第三次刷新也就是第四次访问时页面会返回错误:
二、使用列表限制登陆频率
使用上面的方法有一个问题,假设用户在某一分钟的第一秒访问了一次然后在最后一秒访问两次,此时进入第二秒用户又立马访问两次,根据上面嘚规则这两次访问是可以正常访问的,但是这样就导致用户在两秒内访问了4次和我们的要求不符。
此时可以使用列表来完善这个功能:当用户访问次数小于三次时把当前访问时间插入列表,让用户正常访问大于三次时,提取出第一次访问和当前时间进行比较如果時间间隔小于规定时间,返回错误否则,删掉第一个记录并插入新的纪录在最后。
修改上面Index
类代码为:
一旦任何20S
内访问次数超过三次,返回错误页面: