redis_client :: get занимает больше секунды, чтобы ответить - PullRequest
0 голосов
/ 19 мая 2018

Я разместил этот вопрос на Redis git hub, я обновлю обе стороны, если увижу какой-либо ответ.

Запуск C ++ на VisualStudio 2015, x64

Я заметил, что вызов get получаетпочти 2 секунды, чтобы вернуть значение.мой ключ «Контроль: 107: 1»;Я использую сервер Redis на моей локальной машине;он имеет около 200 ключей.

Я даже разобрал команду: redis_client-> get (key) .get (), чтобы я мог измерить время - вот мой код:

<...snip...>
cpp_redis::future_client* redis_client = new cpp_redis::future_client();
redis_client::connect(host, port, nullptr);
<...snip...>

string r;

auto startTime = std::chrono::steady_clock::now();

auto get = redis_client->get(key); 

auto endTime = std::chrono::steady_clock::now();
__int64 iDiff2 = (std::chrono::duration_cast<std::chrono::microseconds>(endTime - startTime).count()) / 1000;
std::cout << "redis_client->get(" << key << ") " << iDiff2 << std::endl;  

auto val = get.get();

auto endTime2 = std::chrono::steady_clock::now();
__int64 iDiff3 = (std::chrono::duration_cast<std::chrono::microseconds>(endTime2 - endTime).count()) / 1000;
std::cout << "get.get() " << iDiff3 << std::endl;

if (!val.is_null() && val.is_string())
{
    auto startTime = std::chrono::steady_clock::now();

    r = val.as_string();

    auto endTime = std::chrono::steady_clock::now();
    __int64 iDiff2 = (std::chrono::duration_cast<std::chrono::microseconds>(endTime - startTime).count()) / 1000;
    std::cout << "val.as_string() " << iDiff2 << std::endl;
}

return r;

myрезультаты распечатки:

redis_client-> get (Управление: 107: 1) 0

get.get () 1939

val.as_string () 0

Я получаю аналогичные результаты, если ключ существует или нет.

(обратите внимание, что при печати измеренных микросекунд я делю на 1000, поэтому печать выполняется в миллисекундах!)

пожалуйстапомогите мне понять .... спасибо Миа

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Попробуйте использовать bredis : он не использует официальный анализатор redis (hiredis библиотека), поэтому он отлично компилируется в Windows.Это зависит от библиотеки boost (boost::asio), которая также отлично работает в Windows.

0 голосов
/ 23 мая 2018

Итог: моя версия сервера Redis была очень старой.с более новыми версиями у меня были лучшие времена «получить», как вы можете видеть в деталях, как указано Томашем Порадовским в комментарии

Я надеюсь, что кто-то (возможно, возродит MS OpenTech?) возродит поддержку Windows для продвинутых версий сервера Redis.

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