frankerzeng/easy_ratelimiter

基于内存的访问频率限制

v1.0 2019-07-02 01:48 UTC

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

  • 在高并发情况下需要考虑原子性

待办事项

由于共享内存的写操作不是原子的,在高并发情况下应该增加并发控制,以保证原子性。