Redis - Надежный шаблон очереди с несколькими всплывающими окнами в одном запросе - PullRequest
0 голосов
/ 02 сентября 2018

Я реализовал Шаблон надежной очереди Redis , используя BRPOPLPUSH, потому что я хочу избежать опроса.

Однако это приводит к сетевому запросу для каждого элемента. Как я могу дополнить это так, чтобы рабочий BRPOPLPUSH создавал несколько записей одновременно?

1 Ответ

0 голосов
/ 04 сентября 2018

Пока BRPOPLPUSH блокирует версию RPOPLSPUSH и не поддерживают транзакции , и вы можете t handle multiple entries. Also you can t использовать LUA для этих целей из-за характера выполнения LUA : сервер будет заблокирован для новых запросов до завершения сценария LUA.

Вы можете использовать логику на стороне приложения для разрешения нужного вам шаблона очереди. Псевдоязык

func MyBRPOPLPUSH(source, dest, maxItems = 1, timeOutTime = 0) { 
   items = []
   timeOut = time() + timeOutTime
   while ((timeOut > 0 && time() < timeOut) || items.count < maxItems) {
      item = redis.RPOPLSPUSH(source, dest)
      if (item == nil) {
         sleep(someTimeHere);
         continue;
      }
      items.add(item)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...