php - 使用 Redis 的速率限制 laravel 队列

标签 php laravel redis queue

我正在尝试使用以下方法对我的一个 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/

相关文章:

redis - 如何使用 Redis 防止竞争条件?

php - 使用 cae bake 时错误数据库连接丢失

php - 尝试仅更新特定行的列值?

php - 需要向 URL 发送 XML 请求 - 从哪里开始!

php - 如何从 laravel 分页的第一页中删除查询字符串页面?

python-3.x - 从 rest api 或服务器向特定的 django websocket 客户端发送响应

azure - 如何通过ARM模板输出返回Redis的primaryKey?

php - 如何查看浏览器是否支持 flash?

php - 拉维尔 4 : can one model serve several DB tables?

laravel - 监听回调在 Pusher API Laravel 5.4 中不起作用