Я использую libmemcached C API для взаимодействия с memcached. Время от времени memcached_set не удается с SERVER HAS FAILED AND DISABLED UNTIL TIMED RETRY
, Какой может быть общий подход к решению этой проблемы.
Эта ошибка возникает только на производственных серверах и не может быть воспроизведена в среде разработки.
Ниже приведен фрагмент псевдокода, не может опубликовать весь код.
bool set_keys(std::string const & query)
{
// create a DB connection
// execute query
// consider result of query is as following
std::vector<std::tuple<std::string,std::string>>result_set;
memcached_return rc;
for(auto const & item : result_set )
{
rc= memcached_set(memc, std::get<0>(item).c_str(), std::get<0>(item).size(), std::get<1>(item).c_str(), std::get<1>(item).size(), (time_t)0, (uint32_t)0);
if (rc != MEMCACHED_SUCCESS)
fprintf(stderr,"Couldn't store key: %s\n",memcached_strerror(memc, rc));
}
}
Одна вещь, которую я заметил, что memcached_server_list_append
не используется нигде в коде после создания подключения memcached, это может вызвать проблемы?
Возможно сервер перегружен. Проверьте загрузку memcached сверху.
Проверьте имена ключей, когда установлены допустимые значения.
Попробуйте установить Memcached :: OPT_BINARY_PROTOCOL, чтобы включить двоичные данные.
Других решений пока нет …