Memcached странная проблема! - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть приложение Facebook с 250K DAU. Я использую Memcached для кэширования файлов, а MySql выбирает, потому что без этого мой сервер сходит с ума.

Я настроил код следующим образом:

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");

// ДЛЯ ФАЙЛОВ

$doc = $memcache->get('mem_index_html');

if ($doc == null)
{
    $doc = new Document( HTML.'index.html' );
    $memcache->set('mem_index_html', $doc, 0, 86400);
}

// ДЛЯ SQL

$sql=sprintf('count(qtn_id) FROM tb_questions where qtn_lang="EN"));
$total_pages = $memcache->get($sql);

if ($total_pages == null)
{       
    $query_id = DB::query($sql);        
    list( $total_pages ) = DB::nextRow( $query_id );
    DB::free( $query_id );
    $memcache->set($sql, $total_pages, 0, 86400);
}

Проблема в том, что через некоторое время, обычно через 24 часа, начинают появляться ошибки. Журнал не создается, но я получаю тайм-ауты, если я пытаюсь перезагрузить страницу. Я предполагаю, что в эти моменты много трафика, Memcached работает неправильно и все замедляется. Мое временное решение - очистить memcache - $memcache->flush(),, но это не очень хорошее решение.

Я что-то не так делаю? Есть что-то для оптимизации или я не знаю. Я обнаружил, что поиск по сети http://code.google.com/p/memcached/wiki/TutorialCachingStory о создании более одного Memecached серверов. Это лучшее решение?

Спасибо за ваши ответы.

Дарко

1 Ответ

1 голос
/ 13 декабря 2010

Четвертый параметр в команде $ memcache-> set представляет время истечения срока действия.Как только это будет превышено, сохраненный объект больше не будет доступен.Поскольку вы установили его на 24 часа, они не будут доступны после этого периода, если вы не обновите их.

Если для параметра expiry задано значение 0, срок действия элемента никогда не истечет, но его все равно можно удалить, если memcachedзаполнен и должен освободить место.

Если значение меньше 30 дней (30 * 24 * 3600 = 2592000), предоставленное значение рассматривается как смещение от текущего времени.

Если значение больше этого значения, оно будет интерпретировано как абсолютное время.

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