精易论坛

标题: 【实用】利用E2EE缓存对象进行频率限制 [打印本页]

作者: stoneltt    时间: 2021-5-12 12:25
标题: 【实用】利用E2EE缓存对象进行频率限制

群里发现部分人需要后端限制某个功能的频率
因此发一个利用【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互联网服务器套件


作者: vSpear    时间: 2021-5-12 14:04
感谢楼主分享,支持一下!


                                        藏起来的小尾巴,不让你看!  
作者: 53770zhang    时间: 2021-5-12 14:22
前两天在E2EE群看到有人在讨论这个 谢谢楼主
作者: 天界勇士    时间: 2021-5-12 15:11
建议还是用 redis把 安全性高多了
作者: stoneltt    时间: 2021-5-12 16:56
天界勇士 发表于 2021-5-12 15:11
建议还是用 redis把 安全性高多了

部分用户不熟悉Redis或者像我这种想减少环境依赖的人,可以试试这种。
作者: Z隐    时间: 2021-5-12 17:16
感谢楼主分享
作者: By未命名    时间: 2021-8-24 11:46
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
存取键值表 
web.初始化 (取运行目录 ())
web.订阅视图函数 (&订阅视图函数示例, “/”, , )
值 = 创建键值表 ( #配置项_端口, 88)
频率限制_初始化 ()
如果 (web.启动 (值, ))
信息框 (“启动失败”, 0, , )



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


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

请问下是怎么用呢,我这样试了没效果





欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4