Проблема синхронизации с командами Redis - PullRequest
0 голосов
/ 30 августа 2018

У меня есть сервер, который прослушивает очередь и обрабатывает данные с нее.
Это логика для выборки данных:

BLPOP queue 60  
    if data found in queue:  
        LRANGE queue 0 9    //Fetch 10 more items
        int size = queue.size()
        LTRIM queue size -1 //Remove the items fetched by lrange   

Задача
У меня есть 2 узла этого сервера, выполняющих одну и ту же задачу, и я столкнулся с проблемами параллелизма.
Например, один и тот же элемент извлекается в BLPOP одного узла и LRANGE другого узла, что приводит к дублированию обработки.

Один из способов решения проблемы - поместить MULTI EXEC в раздел LRANGE LTRIM.
Но у меня есть несколько вопросов:

  1. Как мне LTRIM получать только элементы внутри транзакции, поскольку мы не можем получить значение LRANGE в транзакции?
  2. Защищает ли транзакция LRANGE от BLPOP другого узла?
...