如何实现Laravel Redis速率限制

时间:2017-11-20 21:19:36

标签: laravel redis queue throttling

尝试为队列实现https://services.gradle.org/distributions/gradle-4.3-bin.zip,以便每秒运行一个作业,向外部API发出HTTP请求并加载一种类型的数据。

但是没有得到如何打电话给工作,尝试了不同的选择,但没有工作。在示例中:

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

什么会放入// Job logic...调度队列,这段代码将在队列类中?以及如何命名key?我的队列名称为loader

任何帮助?

2 个答案:

答案 0 :(得分:4)

将它放在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);
    });
}

密钥应该是任何唯一的字符串。它将识别限制:“允许(10) - >每(60)”。

答案 1 :(得分:0)

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

composer require bandwidth-throttle/token-bucket

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