2017-09-20 3 views
0

Ich versuche Grenze ein meiner Laravel Warteschlangen mit dem unten zu bewerten:Rate Limit Laravel Warteschlange mit Redis

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

    return $this->release(10); 
}); 

ich nicht ganz verstehen, was der ‚Schlüssel‘ für verwendet wird, bedeutet diese Notwendigkeit, pro Job eindeutig sein oder etwas, das die Jobs als eine Gruppe identifiziert (nicht eindeutig)?

Auch ich nehme an, dass dieser Code in die Handle-Methode des Jobs geht?

Antwort

0

'key' ist ein Begrenzername - der in redis gespeicherte Hash, der die Anzahl der erfassten Sperren enthält. Es ist KEYS[1] in der lua script, die tatsächlich die Ratenbegrenzung implementieren.

Um es einfach zu sagen, wenn Sie mehrere Aufrufe von Redis::throttle mit dem gleichen Argument haben, werden alle von ihnen zum Kontingent beitragen. Es ist nicht erforderlich, dass es eindeutig ist, aber die Verwendung mit unterschiedlichen Zerfällen kann zu einem unerwarteten Verhalten führen, da es nur in der Funktion reset() zu verwenden scheint. Ich kann mir vorstellen, dass es Fälle gibt, in denen Sie möglicherweise den gleichen Hash-Namen für mehrere Jobs verwenden müssen, aber es muss ziemlich selten sein.