恢复丢失的任务 Redis python
Restore lost tasks Redis python
我在考虑如何在服务器关闭的情况下确保完成存储在 Redis 队列中的所有任务,例如
我最初的想法是创建一个职位描述实例并将其保存到数据库中。类似于:
class JobDescription(db.Model):
id = Column(...)
name = Column(...)
queue_name = (...)
is_started = (Boolean)
is_finished = (Boolean)
....
然后在必要时更新布尔标志。
所以在 Flask/Django/FastApi 应用程序启动时,我会搜索未 started/not 完成的作业。
我的问题是 - 对于我在此处描述的内容,是否有任何最佳实践或更好的方法来恢复丢失的工作而不是保存到数据库工作描述?
你走在正确的轨道上。要在 Redis 重启后恢复 Rq 任务,
您必须记录它们,以便确定哪些作业需要重新延迟(排队)。
您使用的 JobDescription
方法可以很好地工作,但需要注意的是,随着时间的推移和 JobDescription
的基础 table 变得更大,需要更长的时间才能查询 table 除非你在 is_finished
.
上建立二级索引
您可能会发现使用日期时间而不是布尔值可为您提供更多选择。例如
started_at = db.Column(db.DateTime)
finished_at = db.Column(db.DateTime, index=True)
让您回答几个有用的问题,例如随着时间的推移,作业请求中是否存在有趣的模式、完成延迟如何随时间变化等。
我在考虑如何在服务器关闭的情况下确保完成存储在 Redis 队列中的所有任务,例如 我最初的想法是创建一个职位描述实例并将其保存到数据库中。类似于:
class JobDescription(db.Model):
id = Column(...)
name = Column(...)
queue_name = (...)
is_started = (Boolean)
is_finished = (Boolean)
....
然后在必要时更新布尔标志。
所以在 Flask/Django/FastApi 应用程序启动时,我会搜索未 started/not 完成的作业。
我的问题是 - 对于我在此处描述的内容,是否有任何最佳实践或更好的方法来恢复丢失的工作而不是保存到数据库工作描述?
你走在正确的轨道上。要在 Redis 重启后恢复 Rq 任务, 您必须记录它们,以便确定哪些作业需要重新延迟(排队)。
您使用的 JobDescription
方法可以很好地工作,但需要注意的是,随着时间的推移和 JobDescription
的基础 table 变得更大,需要更长的时间才能查询 table 除非你在 is_finished
.
您可能会发现使用日期时间而不是布尔值可为您提供更多选择。例如
started_at = db.Column(db.DateTime)
finished_at = db.Column(db.DateTime, index=True)
让您回答几个有用的问题,例如随着时间的推移,作业请求中是否存在有趣的模式、完成延迟如何随时间变化等。