frankerzeng / easy_ratelimiter
基于内存的访问频率限制
v1.0
2019-07-02 01:48 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ^5
This package is not auto-updated.
Last update: 2024-10-02 03:26:49 UTC
README
基于内存的访问频率限制
作者在项目中使用此功能的地方是登录注册风控,限制登录请求的次数,例如10分钟内只能重试5次,短信验证码1分钟内最多发送一次,24小时内最多发送5次等。
设置/安装
您可以通过以下命令包含此库:
composer require frankerzeng/easy_ratelimiter
示例
// 验证10秒内1次访问 $validate = (new Ratelimiter(['type' => "17665544332", 'times' => 1, 'time' => 10]))->check(); var_dump($validate);// bool(true) $validate = (new Ratelimiter(['type' => "17665544332", 'times' => 1, 'time' => 10]))->check(); var_dump($validate);// bool(false)
调试
进入服务器控制共享内存
使用 ipcs -m 查看本机共享内存的状态和统计
使用 ipcrm -m shmid 清除共享内存中的数据。
注意
-
需要启用 shmop 扩展
在 Dockerfile 中加入 RUN docker-php-ext-install shmop
-
在高并发情况下需要考虑原子性
待办事项
由于共享内存的写操作不是原子的,在高并发情况下应该增加并发控制,以保证原子性。