使用Redis作为超时队列或排行榜


Use Redis for a timeout queue or leaderboard

我想使用Redis基本上是这样的,如果它(假设)接受SQL:

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

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

我们的想法是也删除完成的"工作",像这样:

DELETE from qtable WHERE id = $someid

我在生产("插入")和消费("选择,删除")端使用哪些Redis命令?

我发现Redis可以用作队列,但我不希望答案严格按照它们插入的顺序,而是基于"现在"是否超过processing_due

我想这和排行榜的问题差不多吧?

(我试着把我的头围绕Redis是如何工作的,从文档中看起来足够简单,但我只是不明白。)

一个体面的解决方案是做ZADD qtable <timestamp> <UUID>,然后使用UUID作为一个键来存储(json)值下吗?

您可以使用排序集,其中分数是您的时间(如您所建议的整数),然后使用ZRANGEBYSCORE进行查询。每个成员都是"字段"的Json表示。示例:{id:"1",data:"bla",processing_due:"3198382"}

关于删除,当找到要删除的相关成员时,只需使用ZREM。将Json字符串作为参数传递,就可以了。

一个可能更好的变体是只保留生成的id作为您的成员,并在单独的String-type key中保存您的id对以及数据的Json表示。只要记住保持两个结构体同步即可。