我正在尝试实现基于时间的持久队列。元素将添加到队列中,并具有与之关联的特定时间。时间值表示该元素将保留在队列头部的时间。多个客户端需要能够访问队列头部的元素,队列头部的元素,以及头部后面的元素。
我可以使用的工具是redis服务器和mysql服务器。
如果没有某种辅助服务器管理队列,这种类型的数据结构是否可行?我怎么能在redis或mysql中实现它?
答案 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