在我的应用程序中,我使用 Resque 来调整图像大小。如果图像在调整大小队列中,我想显示一个“调整大小图像”图标。
这意味着我需要能够在队列中找到与特定模型 ID 相关的所有当前作业。现在我这样做:
Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) }
这是愚蠢的。但是有没有办法查询 Resque 队列以找到第一个参数等于[id]的所有作业?
提前致谢。
在我的应用程序中,我使用 Resque 来调整图像大小。如果图像在调整大小队列中,我想显示一个“调整大小图像”图标。
这意味着我需要能够在队列中找到与特定模型 ID 相关的所有当前作业。现在我这样做:
Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) }
这是愚蠢的。但是有没有办法查询 Resque 队列以找到第一个参数等于[id]的所有作业?
提前致谢。
您应该将图像元数据与模型一起存储,而不是查询 resque 队列。
假设您正在存储产品图像。您可能正在使用 Redis 哈希来存储产品详细信息。只需添加另一个这样的标志 -
hset product:123 is_resizing true
您可以让他们执行简单的查找以显示调整大小的图像图标。在您的 resque 作业结束时,删除is_resizing
密钥,然后添加resized_image_url
密钥。
我认为最简单的方法可能是使用 redis 集来缓存这些信息。
当您将图像添加到“调整大小”队列时,还要使用 SADD 将图像 ID 添加到“resize_in_progress”集。(我假设您有某种唯一键或名称来引用图像,即使没有存储在数据库中。也许是文件名的完整路径。)
在“调整大小”过程中,作为成功调整图像大小后的最终操作之一,使用 SREM 命令将其从集合中删除。
当您想要所有图像的列表时,您可以使用 SMEMBERS 获取它。如果您只需要特定模型 id 的成员,您可能需要为每个模型存储一个单独的集合,命名为“resize_in_progress_3451”,其中 3451 是调整图像大小的模型的 id。
有关更多设置命令,请参见http://redis.io/commands#set。