持久的基于时间的队列

时间:2016-05-02 05:00:03

标签: mysql node.js database redis

我正在尝试实现基于时间的持久队列。元素将添加到队列中,并具有与之关联的特定时间。时间值表示该元素将保留在队列头部的时间。多个客户端需要能够访问队列头部的元素,队列头部的元素,以及头部后面的元素。

我可以使用的工具是redis服务器和mysql服务器。

如果没有某种辅助服务器管理队列,这种类型的数据结构是否可行?我怎么能在redis或mysql中实现它?

1 个答案:

答案 0 :(得分:2)

可以使用redis的排序集。您可以继续按照排序集中的时间推送数据。例如

zadd queue 1 value1
zadd queue 2 value2
zadd queue 3 value3
zadd queue 4 value4
zadd queue 5 value5

让我们说1到5是你的价值观(以小时计的时间)。现在,如果您在第3小时查询,您将会这样查询。

zrangebyscore queue 3 +inf

这将返回

value3,value4,value5结果。随着时间的推移,这不会给你前2个值。您可以像这样设计队列。

另外,为了避免分类集过多,您可以使用

定期删除不需要的数据
zremrangebyscore queue -inf that_hour-1

了解排序集以了解更多http://redis.io/topics/data-types