如何从Redis作业队列中移除特定的作业

4

我刚接触Redis,所以这可能是一个基础问题。

我正在考虑使用列表创建Redis作业队列。这些作业本身将是JSON编码的对象。

我知道可以使用LPOPRPUSH来管理队列。甚至在使用多个列表(例如“Queued”,“Processing”和“Completed”)时可以使用RPOPLPUSH

假设我有一个工作程序通过稳定地遍历“Queued”列表来处理图像。然后假设在该特定作业开始处理之前,客户端已从前端删除了一张图像。如何从“Queued”列表中删除此作业,以便工作程序不浪费时间处理它?

换句话说,如何为作业队列索引各个作业?

1个回答

0
使用按时间戳为分数的排序集合,您可以删除作业。
$ redis-cli zadd myjobs `date +"%s.%N"` job1
$ redis-cli zadd myjobs `date +"%s.%N"` job2
$ redis-cli zadd myjobs `date +"%s.%N"` job3
$ redis-cli
127.0.0.1:6379> ZRANGEBYSCORE myjobs -inf +inf WITHSCORES
1) "job1"
2) "1638908693.1293526"
3) "job2"
4) "1638908696.5061705"
5) "job3"
6) "1638908699.2742543"
127.0.0.1:6379> ZREMRANGEBYLEX myjobs [job2 [job2
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE myjobs -inf +inf WITHSCORES
1) "job1"
2) "1638908693.1293526"
3) "job3"
4) "1638908699.2742543"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接