Redis小案例(一):实现网站访问频率限制

马谦马谦马谦
马谦马谦马谦
马谦马谦马谦
611
文章
12
评论
2017年12月3日16:56:50 评论

网站中经常需要用到网站限流,例如限制用户恶意爬虫获取网页信息以及在网站访问流量大时限制访问频率等等,这里使用redis做一个简单的网站登录限制案例。

一、使用EXPIRE进行访问频率限制

逻辑:用户登入网页,判断是否为第一次登入,如果是,创建一个新键记录访问次数为1,并设置超时时间。后面再登入时先判断键是否存在且大于访问次数限制,如果是的话,返回错误页面,否则访问次数+1,正常访问。

测试,在网页中输入https://127.0.0.1:8080?user=maqian,并刷新三次:

Redis小案例(一):实现网站访问频率限制

Redis小案例(一):实现网站访问频率限制

Redis小案例(一):实现网站访问频率限制

当第三次刷新也就是第四次访问时,页面会返回错误:

Redis小案例(一):实现网站访问频率限制

二、使用列表限制登陆频率

使用上面的方法有一个问题,假设用户在某一分钟的第一秒访问了一次,然后在最后一秒访问两次,此时进入第二秒,用户又立马访问两次,根据上面的规则,这两次访问是可以正常访问的,但是这样就导致用户在两秒内访问了4次,和我们的要求一分钟最多3次不符。

此时可以使用列表来完善这个功能:当用户访问次数小于三次时,把当前访问时间插入列表,让用户正常访问。大于三次时,提取出第一次访问和当前时间进行比较,如果时间间隔小于规定时间,返回错误,否则,删掉第一个记录,并插入新的纪录在最后。

修改上面Index类代码为:

测试,正常访问:

Redis小案例(一):实现网站访问频率限制

一旦任何20S内访问次数超过三次,返回错误页面:

Redis小案例(一):实现网站访问频率限制

马谦马谦马谦
  • 本文由 发表于 2017年12月3日16:56:50
  • 转载请务必保留本文链接:https://www.dyxmq.cn/databases/redis/redis-demo-visit-limit.html
redis源码分析:链表实现 Redis

redis源码分析:链表实现

一、链表定义 链表在redis中的使用十分广泛,例如列表的底层实现之一就是链表,包括发布、订阅等等功能都是有用到链表的。redis中链表在adlist.h和adlist.c中实现,只用了300+行代码...
redis中的发布和订阅 Redis

redis中的发布和订阅

一、发布和订阅 除了任务队列以外,redis还有一种基于“发布/订阅”模式的消息传递,使得客户端可以订阅某个频道,当频道有消息产生时,会把消息传递到所有的订阅者。和列表不一样的是,发布和订阅可以是一对...
Redis小案例(二):redis实现消息队列 Redis

Redis小案例(二):redis实现消息队列

一、任务队列概述 消息队列,顾名思义就是一个用来传递任务的队列。消息队列在开发中十分常见,经常用在页面后台处理需要很长时间的操作时,例如发送邮件、短信以及进行复杂数据运算操作等,这些操作通常会阻塞页面...
python redis-py模块用法 Python

python redis-py模块用法

一、安装 redis中操作redis的模块为redis-py,使用pip install redis或者easy_install redis安装即可,也可以进去https://pypi.python....
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: