我想使用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表示。只要记住保持两个结构体同步即可。