如何在Redis中实现队列管理系统

时间:2019-02-20 06:57:05

标签: algorithm sorting redis queue priority-queue

我正在尝试使用Redis实现排队系统。所以可以说我们有这个列表:

> LPUSH listTickets 1 2 3 4 5 6 7 8 9

,并以移动应用程序用户身份分配了一个号码4,另一个用户号码6。现在,我想向他们显示他们面前有多少张票(还可以计算等待的估计时间)。现在,这似乎很简单,

> LPOP listTicket
"4"

然后我们广播结果(当前要调用的票号),然后在移动应用程序中,每个人都将从自己的票号中减去该结果。例如我当前的票是6,所以6-4=2这样每个用户都知道前面有多少张票

但是,一旦您想添加功能以允许用户删除其票证或将其推送到队列的末尾,事情就会变得复杂。例如删除后

> LRANGE listTicket 0 -1 
1) "2"
2) "4"
3) "6"
4) "7"
5) "8"

当我们LPOP listTicket时,我们将得到2,而票证为6的移动应用将计算6-2,而得到4,这是错误的计算。

您有什么想法吗?每当有人删除其工单时,获取列表中每个工单的索引是一个昂贵的计算过程吗?我应该只发送队列中的所有票证,让用户计算自己的位置吗?


我希望系统具有可伸缩性。因此,redis节点服务器可以处理总计5万个(通过不同的队列或列表)连接的移动应用程序,从而使它们在为其预订票证的队列中排名。

我考虑过使用ZRANK,但这将如何加载服务器?

0 个答案:

没有答案