andrewdyer/predis-request-limiter 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

andrewdyer/predis-request-limiter

Composer 安装命令:

composer require andrewdyer/predis-request-limiter

包简介

A framework-agnostic library for managing and enforcing request rate limits, backed by Redis via Predis

README 文档

README

A framework-agnostic library for managing and enforcing request rate limits, backed by Redis via Predis.

Latest Stable Version Total Downloads License PHP Version Require

Introduction

This library tracks request activity against a configurable rate limit window, request threshold, and storage key, exposing a simple API to check whether the limit has been exceeded and invoke a registered handler in response. Any Predis-compatible client can be used as the backing store, making it straightforward to integrate consistent rate limiting into any application regardless of framework.

Prerequisites

  • PHP: Version 8.3 or higher is required.
  • Composer: Dependency management tool for PHP.
  • Redis: A running Redis instance is required.

Installation

composer require andrewdyer/predis-request-limiter

Getting Started

1. Create a Predis client

use Predis\Client;

$client = new Client([
    'scheme' => 'tcp',
    'host'   => '127.0.0.1',
    'port'   => 6379,
]);

2. Create a limiter

Instantiate Limiter with a Predis client and a unique identifier. The identifier is interpolated into the storage key to namespace requests per user, IP, or endpoint:

use AndrewDyer\PredisRequestLimiter\Limiter;

$limiter = new Limiter($client, '127.0.0.1');

3. Configure the rate limit

Set the maximum number of requests and the time window in seconds:

$limiter->setRateLimit(requests: 10, perSecond: 60);

Usage

Checking and incrementing

Check whether the limit has been exceeded before incrementing the request count:

if ($limiter->hasExceededRateLimit()) {
    // Limit exceeded — respond with 429 or invoke the handler
} else {
    $limiter->incrementRequestCount();
}

Setting a limit exceeded handler

Register a callable to invoke when the limit is exceeded:

$limiter->setLimitExceededHandler(function (): void {
    http_response_code(429);
    echo 'Too many requests.';
    exit;
});

Then invoke it when the limit is exceeded:

if ($limiter->hasExceededRateLimit()) {
    ($limiter->getLimitExceededHandler())();
} else {
    $limiter->incrementRequestCount();
}

Customising the storage key

The default storage key template is rate:%s:requests, where %s is replaced by the identifier. Override it to namespace keys differently:

$limiter->setStorageKey('api:limit:%s');

With the identifier 127.0.0.1, the resolved key becomes api:limit:127.0.0.1.

License

Licensed under the MIT licence and is free for private or commercial projects.

andrewdyer/predis-request-limiter 适用场景与选型建议

andrewdyer/predis-request-limiter 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 554 次下载、GitHub Stars 达 1, 最近一次更新时间为 2019 年 07 月 09 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「redis」 「php」 「predis」 「rate-limit」 「framework-agnostic」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 andrewdyer/predis-request-limiter 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 andrewdyer/predis-request-limiter 我们能提供哪些服务?
定制开发 / 二次开发

基于 andrewdyer/predis-request-limiter 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 554
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 12
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-07-09