我有一个 memcached 服务器。我使用 libmemcached C api 与之交互。我正在使用非阻塞模式和无回复模式(行为标志)。
如果有帮助,我还在 nginx C 模块中使用 libmemcached。
问题是 memcached_mget 似乎被阻塞了,即对于延迟约为 40 毫秒的服务器,memcached_mget 需要 40 毫秒才能完成。这并不完全是异步的。
这是我正在使用的代码:
const char* localKeys[2] = {"key1", "key2"};
size_t k_length[2] = {4, 4};
gettimeofday(&t1, NULL);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "no block: %d ", memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK));
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "no reply: %d ", memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NOREPLY));
retFt = memcached_mget(memc, localKeys, k_length, 2);
gettimeofday(&t2, NULL);
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, log, 0, "memcached_mget duration (microseconds): %d, result : %d", t2.tv_usec - t1.tv_usec, retFt);
retFt = memcached_fetch_execute(memc, fp, &callback_struct, 1);
我正在使用 ASCII 协议。也尝试使用二进制文件,但没有帮助。我也试过 memcached_mget_execute。我正在使用 tc 模拟延迟,如下所示:
tc qdisc add dev lo root netem delay 20ms