如何实现 Laravel Redis 限速

How to implement Laravel Redis Rate Limiting

正在尝试将队列 Rate Limiting 实现为每秒 运行 一个作业,向外部 API 发出 HTTP 请求并加载一种类型的数据。

但不知道如何调用作业,尝试了不同的选项但没有用。在示例中:

Redis::throttle('key')->allow(10)->every(60)->then(function () {
    // Job logic...
}, function () {
    // Could not obtain lock...
    return $this->release(10);
});

什么将放入 // Job logic... 调度队列并且此代码将在队列 class 中?以及如何命名 key?我的队列名称是 loader.

有什么帮助吗?

放在Job的handle方法里面。

public function handle() {
    Redis::throttle('key')->allow(10)->every(60)->then(function () {
        // Job logic...
    }, function () {
        // Could not obtain lock...
        return $this->release(10);
    });
}

密钥应该是任何唯一的字符串。它将识别限制:"allow(10)->every(60)".

您还可以使用此包对 Redis 或其他来源进行速率限制。使用设置将存储桶大小和速率设置为时间限制的分数,因此存储非常小。

composer require bandwidth-throttle/token-bucket

https://github.com/bandwidth-throttle/token-bucket