redis_client :: get需要一秒多的时间才能回复

时间:2018-05-18 23:30:31

标签: c++ redis

我在Redis git hub上发布了这个问题,如果我看到任何回复,我会更新双方。

在VisualStudio 2015上运行C ++,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;

我的结果打印是:

redis_client-&gt; get(控制:107:1)0

get.get()1939

val.as_string()0

我得到了类似的结果 密钥是否存在。

(请注意,当我打印测量的微秒时,除以1000,因此打印时间为毫秒!)

请帮我理解.... 谢谢 米亚

2 个答案:

答案 0 :(得分:0)

底线:  我的Redis服务器版本很旧。 对于更新版本,我经历了更好的“获取”时间,正如您在Tomasz Poradowski在评论中所指出的细节中所看到的那样

我希望有人(可能会复活MS OpenTech?)恢复对Redis服务器高级版本的Windows支持。

答案 1 :(得分:0)

尝试使用bredis:它不使用官方的redis解析器(hiredis库),这就是为什么它可以在Windows上完美编译的原因。它取决于boost(boost::asio)库,该库在Windows上也可以正常工作。