将Redis用于超时队列或排行榜

时间:2013-05-21 09:57:28

标签: php python database redis queue

我想使用Redis,如果它(假设)接受SQL:

SELECT id, data, processing_due FROM qtable WHERE processing_due < NOW()

其中processing_due是某种整数时间戳。

然后,我们的想法是删除已完成的“工作”,例如:

DELETE from qtable WHERE id = $someid

我会在制作(“插入”)和消费(“选择,删除”)结束时使用哪些Redis命令?

我发现Redis可以用作队列,但我不希望答案严格按插入顺序排列,而是基于“now”是否超过processing_due

我认为这与排行榜几乎相同?

(我试图了解Redis的工作方式,从文档中看起来很简单,但我只是不明白。)

一个不错的解决方案是{I} {},然后使用UUID作为键来存储(json)值吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Sorted Set,其中得分是您的时间(您建议的整数),然后使用ZRANGEBYSCORE进行查询。每个成员都是您“领域”的Json表示。例如:{id:"1",data:"bla",processing_due:"3198382"}

关于删除,只需在找到要删除的相关成员时使用ZREM。传递你的Json字符串作为参数,你没事。

一个可能更好的变体是将生成的ID保存为您的成员,并在单独的 String - 类型键中保存ID对以及数据的Json表示。请记住保持两个结构同步。