Frage

Jeder Trick verzögert Aufgabenausführung zu tun (das heißt Scheduling), basierend auf Redis?

Vielleicht haben einige kluge Weise BLPOP für eine bestimmte Anzahl von Sekunden zu verzögern? ..

War es hilfreich?

Lösung

Sie können mit einem Ring aus mehreren Listen arbeiten, die eine Zeitkomponente in ihrem Namen haben. Als Zeitkomponente Sie die aktuelle Sekunde dauern kann (0-59).

Sie fügen immer Aufgaben auf die Liste für die aktuelle Sekunde. Um die Jobs, die Sie einen BLPOP tun (mit niedrigen Timeout) nur auf den Listen, in denen sichergestellt ist, dass der Inhalt ist älter als die angegebene Anzahl von Sekunden.

Wenn Sie von mehreren Hosts arbeiten müssen Sie darauf achten, dass die Uhren synchron sind (NTP).

Andere Tipps

Wenn Sie mit redis tun Scheduling wollen, würde ich mit sortierten Satz vorschlagen (die z *) Befehle:

http://code.google.com/p/redis/wiki/SortedSets

Was können Sie tun, ist so etwas wie folgt aus:

ZADD jobs <unix timestamp of when you want the job to run> <job identifier>

z:

ZADD jobs 1291348355

Dann kann jeder so oft (bis zu jeder Sekunde) Sie geplante Aufträge ziehen, die ausgeführt werden sollte (oder sollte jetzt ausgeführt haben):

ZRANGEBYSCORE jobs -inf, <current unix timestamp>

Boom, haben Sie Ihre Aufträge auszuführen. Natürlich stellen Sie sicher erledigen Aufträge aus dem sortierten Satz zu löschen.

Während die @ efalcao Antwort ein sehr gutes ist, Ihre Frage, die redis hinweisen könnte nicht perfekt nicht die Anforderungen Ihrer Anwendung anpassen. Wenn Ihre Anwendung die Natur eines Meldungsfeld hat, beachten Sie bitte mit RabbitMQ , die verzögerten Nachrichten gehört oder akka wenn Sie das Gefühl fett

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top