Как с помощью Redis построить очередь, в которой элементы очереди можно было бы менять местами? - PullRequest
0 голосов
/ 16 июня 2020

Я создаю систему, которая помещает unique-id в конец очереди с соответствующим номером списка ожидания. Когда пользователь регистрируется в системе, ему дается номер списка ожидания , который связан с unique-id , который помещается в конец очереди.

Номер списка ожидания, связанный с уникальным идентификатором в очереди, уменьшается на 1, когда член очереди выталкивается из передней части очереди или когда член повышается в очереди. Члены очереди повышаются при выполнении определенной задачи (это может быть любая задача, вызывающая функцию повышения).

В системе должны быть следующие функции: -

  1. getWaitlist (строка идентификатора) : - Функция при вызове возвращает текущий номер списка ожидания члена очереди, используя идентификатор
  2. PromoMember (строка идентификатора) : - Функция при вызове выполняет две вещи: -
    1. Если член не находится в 0-м индексе очереди, тогда член меняет местами свою позицию в списке ожидания с членом, находящимся прямо перед ним.
    2. Если член находится в 0-м индексе очереди, член выталкивается из очереди и его список ожидания становится равным 0, а остальная часть списка ожидания члена уменьшается на 1 .

Решение, которое я мог придумать, - использовать Redis list для построения очереди. Но проблема, с которой я сталкиваюсь, - это получение элемента из очереди, так как использование LINDEX занимает время O (N), и индекс элемента должен быть известен заранее. Использование LRANGE занимает O (N) времени, чтобы получить все элементы.

В списках Redis нет возможности поменять местами элементы, это нужно было делать отдельно, извлекая весь список, меняя местами элементы и отправляя его обратно в Redis, что включает слишком много операций.

Есть ли лучший способ, архитектура или технологический стек, который я должен использовать для повышения производительности системы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...