Как внедрить систему управления очередью в Redis - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать систему очередей, используя 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-node обрабатывать в общей сложности 50 тысяч (по разным очередям или спискам) подключенных мобильных приложений, получая свой рейтинг в очереди, на которую они подписали свой билет.

Я думал об использовании ZRANK, но какэто загрузить сервер?

...