Question

Toutes les astuces pour faire l'exécution des tâches en retard (à savoir d'ordonnancement) basée sur Redis?

Peut-être une façon intelligente de retarder BLPOP pour un nombre donné de secondes? ..

Était-ce utile?

La solution

Vous pouvez travailler avec un anneau de plusieurs listes qui ont une composante de temps en leur nom. En tant que composant de temps, vous pouvez prendre le second courant (0-59).

Vous ajoutez toujours des tâches à la liste pour le second courant. Pour obtenir les emplois que vous faites un BLPOP (avec temporisation faible) uniquement sur les listes où il est garanti, que le contenu est plus que le nombre de secondes.

Si vous travaillez à plusieurs hôtes, vous devez prendre soin, que les horloges sont synchronisées (NTP).

Autres conseils

Si vous voulez faire la planification avec Redis, je suggère d'utiliser ensemble les commandes triées (le z *):

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

ce que vous pouvez faire quelque chose comme ceci:

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

par exemple:

ZADD jobs 1291348355

Alors, de temps (jusqu'à chaque seconde), vous pouvez tirer les tâches planifiées devraient fonctionner (ou aurait dû exécuter maintenant):

ZRANGEBYSCORE jobs -inf, <current unix timestamp>

Boom, vous avez obtenu vos emplois à courir. Bien sûr, assurez-vous de supprimer des emplois fait à partir du jeu de tri.

Alors que la réponse du @ efalcao est un très bon, votre question pourrait indiquer que Redis ne convient pas parfaitement à vos besoins d'application. si votre application a la nature d'une zone de message, s'il vous plaît envisager d'utiliser RabbitMQ, qui, si vous présente des messages retardés ou akka sentir gras

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top