开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 25919|回复: 6
收起左侧

[例程] 【实用】利用E2EE缓存对象进行频率限制

[复制链接]
结帖率:91% (48/53)
发表于 2021-5-12 12:25:05 | 显示全部楼层 |阅读模式   四川省泸州市

群里发现部分人需要后端限制某个功能的频率
因此发一个利用【E2EE-通用缓存对象】开发的频率限制


原理:缓存记录每次访问时间,然后进行对比,如果需要精确到毫秒,请自行修改为13位时间戳之类的毫秒级时间
有需要的也可以用Redis,原理和这个差不多,另外一种是递增次数,那个在高并发下可以减少内存占用)


使用方法:
1、先初始化,不需要持久化缓存就创建为内存缓存,把文件路径注释了
2、调用:频率限制_是否满足(“接口1“,“用户IP”,10,5)‘//注释:接口1限制每个IP在5秒内最多只能访问10次

  
子程序名返回值类型公开备 注
频率限制_初始化逻辑型 初始化缓存对象
参数名类 型参考可空数组备 注
是否静态化逻辑型
变量名类 型静态数组备 注
文件路径文本型 
如果真 (是否静态化)
文件路径 = 取运行目录 ()“/Data/Temp/AccessFrequency”
返回 (集_频率限制缓存.创建内存缓存 (0, 64, 文件路径))
子程序名返回值类型公开备 注
频率限制_是否满足逻辑型 未达到限制返回真,达到频率限制了就返回假
参数名类 型参考可空数组备 注
场景文本型区分场景方便代码美观
主键唯一标识文本型区分在同一场景中的不同来源
次数限制整数型由于每次记录都会进行保存,尽量小点
频率限制整数型多长周期限制(单位:秒)
变量名类 型静态数组备 注
列表存取列表 
最后一次访问时间日期时间型 
名称文本型 
名称 = 场景 + “-” + 主键唯一标识
集_频率限制缓存.取列表 (名称, 列表)
判断 (列表.取数量 () < 次数限制)  ' //没有达到次数限制
列表.插入时间 (1, 取现行时间 ())
列表.删除 (次数限制 + 1, -1)
集_频率限制缓存.置列表 (名称, 列表, 频率限制)
返回 ()
最后一次访问时间 = 列表.取时间 (列表.取数量 (), )
判断 (取时间间隔 (取现行时间 (), 最后一次访问时间, #秒 ) < 频率限制)
返回 ()
列表.插入时间 (1, 取现行时间 ())
列表.删除 (次数限制 + 1, -1)
集_频率限制缓存.置列表 (名称, 列表, 频率限制)
返回 ()


i支持库列表   支持库注释   
e2eeE2EE互联网服务器套件

评分

参与人数 1好评 +1 精币 +2 收起 理由
53770zhang + 1 + 2 感谢分享,很给力!~

查看全部评分

本帖被以下淘专辑推荐:

  • · Mark|主题: 147, 订阅: 1
结帖率:96% (25/26)

签到天数: 11 天

发表于 2021-8-24 11:46:24 | 显示全部楼层   广东省揭阳市
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
存取键值表 
web.初始化 (取运行目录 ())
web.订阅视图函数 (&订阅视图函数示例, “/”, , )
值 = 创建键值表 ( #配置项_端口, 88)
频率限制_初始化 ()
如果 (web.启动 (值, ))
信息框 (“启动失败”, 0, , )



子程序名返回值类型公开备 注
订阅视图函数示例逻辑型 该函数由易语言助手【E2EE自动添加订阅函数】插件添加,有问题请联系我们反馈
参数名类 型参考可空数组备 注
请求对象地址整数型
响应对象地址整数型
变量名类 型静态数组备 注
请求服务器请求 
响应服务器响应 
模板数据存取键值表 
逻辑型 
地址文本型 
取回请求对象 (请求对象地址, 响应对象地址, 请求, 响应)
地址 = 请求.取用户地址 ()
调试输出 (地址)
' // TODO: 业务处理逻辑
值 = 频率限制_是否满足 (“订阅视图函数示例”, “用户IP”, 2, 10)
调试输出 ()
模板数据.置文本 (“测试”, “6666”)
返回 (响应.写出成功 (, , ))


i支持库列表   支持库注释   
e2eeE2EE互联网服务器套件
spec特殊功能支持库

请问下是怎么用呢,我这样试了没效果
回复 支持 反对

使用道具 举报

结帖率:92% (80/87)

签到天数: 12 天

发表于 2021-5-12 17:16:24 | 显示全部楼层   重庆市重庆市
感谢楼主分享
回复 支持 反对

使用道具 举报

结帖率:91% (48/53)

签到天数: 1 天

 楼主| 发表于 2021-5-12 16:56:00 | 显示全部楼层   四川省泸州市
天界勇士 发表于 2021-5-12 15:11
建议还是用 redis把 安全性高多了

部分用户不熟悉Redis或者像我这种想减少环境依赖的人,可以试试这种。
回复 支持 反对

使用道具 举报

结帖率:9% (1/11)

签到天数: 7 天

发表于 2021-5-12 15:11:38 | 显示全部楼层   河南省新乡市
建议还是用 redis把 安全性高多了
回复 支持 反对

使用道具 举报

结帖率:98% (131/134)

签到天数: 11 天

发表于 2021-5-12 14:22:56 | 显示全部楼层   重庆市重庆市
前两天在E2EE群看到有人在讨论这个 谢谢楼主
回复 支持 反对

使用道具 举报

结帖率:20% (1/5)

签到天数: 3 天

发表于 2021-5-12 14:04:56 | 显示全部楼层   四川省成都市
感谢楼主分享,支持一下!



                                            藏起来的小尾巴,不让你看!  
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 致发广告者

    发布主题 收藏帖子 返回列表

    sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
    拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
    论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
    防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
    Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

    快速回复 返回顶部 返回列表