redis限制IP访问次数的方法


有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次,类似这样的需求很容易用redis来实现。

redis限制IP访问次数的方法

策略1:

在redis中保存一个count值(int),key为user:$ip,value为该ip访问的次数,第一次设置key的时候,设置expires。

count加1之前,判断是否key是否存在,不存在的话,有两种情况:1、该ip未访问过;2、该ip访问过,但是key已经过期了。那么此时需要再次设置一次expires。

如果用户访问的时候,判断count的值是否大于上限,如果低于上限,就处理请求,否则就拒绝处理请求。

策略2:

考虑这种情况,假设只允许用户60秒内访问100次,如果有一个用户在第1秒访问了1次,在第59秒的时候,访问了99次,然后在第61秒的时候,访问了100次。

酒业公司网站整站 For Dedecms5.7 酒业公司网站整站 For Dedecms5.7

基于DEDECMS5.7制作的酒业公司整站代码。 安装方法:1.删除install目录下的install_lock.txt和index.html。并修改index.php.bak为index.php2.访问:域名/install 按照提示进行安装.3.安装完成后==后台==数据还原 还原后登陆信息:用户名:admin密码:admin

酒业公司网站整站 For Dedecms5.7 1 查看详情 酒业公司网站整站 For Dedecms5.7

如果按照策略1的情况处理,第1~60秒之间接受了100次,在第61秒接收100次请求,所以62~120这段时间内,不再处理该ip的请求。

貌似没问题,但是,细细思考一下,第59秒到61秒之间接受了99+100=199请求,时间间隔只有3秒。那么这样的话,最初的设计就存在问题了。

解决方案:可以使用redis的list(双向队列)数据结构,key就是user:$ip,也就是每一个ip设置一个双向队列,每次请求到达的时候,进行如下判断:

1、如果list中的元素个数少于100个,那么就将请求到达时的时间戳Lpush到list中。

2、如果list中的元素多余100个,那么,就取出Lindex(-1)即最右边,也就是100个请求中最早的那一个请求的时间戳,如果最早的时间戳和当前时间戳相差超过60秒,那么表示第一个请求已经过期了,就将第一个请求出队Rpop。然后将当前时间戳入队Lpush。

更多redis知识请关注redis入门教程栏目。

以上就是redis限制IP访问次数的方法的详细内容,更多请关注其它相关文章!


# 数据结构  # 第一个  # 求出  # 受了  # 就将  # redis  # 相关文章  # 重庆推广网店网站  # 西湖区网站推广优化公司  # 南沙网站优化推广教程  # 宽带营销推广课程  # 这段  # 很容易  # 如何实现  # 网络带宽  # 到哪里可以学网站优化  # 洛阳牡丹江网站建设  # 江门房地产网站推广热线  # 准格尔旗网站建设类型  # 网站站长seo推广  # 安阳网络推广营销网 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Chart.js 教程:自定义插件实现图表与图例间距调整  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  mysql怎么查询数据_mysql基础查询语句使用教程  TikTok网页版实时观看入口 TikTok网页版短视频在线浏览  J*aScript二进制处理_ArrayBuffer与Blob  Animex动漫社社登录官网 Animex动漫社资源社入口直达  FullCalendar自定义按钮样式定制指南  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  J*aScript字符串_Unicode处理  如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  创建快捷方式启动系统保护  《下一站江湖2》武器获取方法  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧  《梦想世界:长风问剑录》药师一图流分享  PHP实现等比数列:构建数组元素基于前一个值递增的方法  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  如何在Golang中处理表单文件上传_Golang 表单文件上传示例  火柴人战争网页版在线玩  b站怎么查看视频的码率_b站视频码率查看方法  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  荣耀盒子应用管理技巧  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  《小宇宙》标记不友善评论方法  VB表达式书写规则解析  芒果TV官网登录入口 芒果TV官方网站登录入口  解决异步Python机器人中同步操作的阻塞问题  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  TikTok视频播放不流畅怎么办 TikTok视频播放优化方法  Python对象引用与属性赋值:理解链表中的行为  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  顺丰快递在线查询系统 顺丰快递官方查单入口  《i莞家》修改昵称方法  苹果手机聊天记录删除了如何恢复  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  《百果园》充值余额方法  Python测试中模块导入路径解析的最佳实践  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  纯CSS实现自适应宽度与响应式布局的水平按钮组  发博客与长微博技巧 

 2020-04-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.