3
我有一個memcached服務器。我使用libmemcached C API與它進行交互。我正在使用非阻塞模式並且沒有回覆模式(行爲標誌)。libmemcached - memcached_mget似乎阻止了
我也在nginx C模塊中使用libmemcached,如果有幫助的話。
問題是,memcached_mget似乎阻塞,即對於具有大約40ms延遲的服務器,memcached_mget需要40ms才能完成。這不完全是異步的。
這裏是我使用的代碼:
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
您是否試過在日誌記錄之後獲取開始時間? – 2013-03-24 17:07:07
是的,它是一樣的。 – florinp 2013-03-24 17:09:06
是否設置了阻塞方法? – 2013-03-25 10:14:33