У меня есть приложение 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 серверов. Это лучшее решение?
Спасибо за ваши ответы.
Дарко