我正在尝试使用以下方法对我的一个 Laravel 队列进行速率限制:
Redis::throttle('key')->allow(10)->every(60)->then(function () {
// Job logic...
}, function () {
// Could not obtain lock...
return $this->release(10);
});
我不太明白“ key ”的用途,每个作业是否需要唯一或将作业标识为一个组(不是唯一)的东西?
另外,我假设这段代码是进入作业的 handle 方法?
最佳答案
'key'
是一个限制器名称 - 存储在 redis 中的散列,其中包含获取的锁的数量。它是 lua script 中的 KEYS[1]
实际实现速率限制。
简单来说,如果您使用相同的参数多次调用 Redis::throttle
,所有这些都将贡献给配额。它不需要是唯一的,但将它与不同的衰减一起使用可能会导致意外行为,因为它似乎仅在 reset()
函数中使用。我想有些用例可能需要为多个作业使用相同的哈希名称,但这种情况一定很少见。
关于php - 使用 Redis 的速率限制 laravel 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46316606/