наймите асинхронное соединение с паролем

Я использую библиотеку Hiredis C для подключения к моему экземпляру Redis. Я рассматриваю возможность изменения моего redis.conf, чтобы включить опцию requirepass. Я знаю, что для redisConnect() я просто подключаюсь к хосту/порту без аутентификации, а затем отправляю команду AUTH mypassword, используя redisCommand() и контекст. Однако как это сделать для redisAsyncConnect()? Глядя на исходный код, функция redisAsyncCommand() не работает, когда ее просят отправить команду AUTH mypassword.


person Paul Grinberg    schedule 25.11.2019    source источник


Ответы (1)


Я ошибся в анализе работы функции redisAsyncConnect(). Следующий код работает, с той лишь оговоркой, что вы не знаете, успешно ли выполнена команда AUTH:

  redisAsyncContext *async_context = redisAsyncConnect(redis_info.host, redis_info.port);
  if (async_context->err)
  {
    throw std::runtime_error("Error creating async_context: " + async_context->errstr);
  }
  if (0 != strlen(redis_info.passwd))
  {
    if (REDIS_OK != redisAsyncCommand(async_context, NULL, NULL, "AUTH %s", redis_info.passwd))
    {   
      throw std::runtime_error("Error sending AUTH in async_context");
    }   
  }
person Paul Grinberg    schedule 26.11.2019