Облако запросов перевести с mysql на memcached

Статус
В этой теме нельзя размещать новые ответы.

jusuf

Бывший модератор
Регистрация
3 Апр 2006
Сообщения
329
Реакции
205
В общем у меня на сайте написан вот такой костыль , он собирает в базу запросы по которым люди ходят по сайту и потом выводить последних 30. Как базу использует mysql но последнее время заметил что сайт тормозит хочу переписать на memcached должно увеличить скорость записи и считывания.

вот как это выглядит:
Capture.PNG

И воt как это теперь реализовано
PHP:
//записываем запрос  
$query = addslashes($q);
$db->exec("INSERT INTO lastsearch (name) VALUES ('{$query}')");

//считываем последние запросы
$get_result_prep=$db->prepare("SELECT * FROM lastsearch WHERE id > 1 ORDER BY id DESC LIMIT 30");
$get_result_prep->execute();
$lastsearch = '';  
foreach( $get_result_prep->fetchAll(PDO::FETCH_ASSOC) as $last )
{   
    $last = str_replace(array('<', '>'), '', $last);
    $lastsearch .= '<li><a href="/music/'.urlencode(trim($last['name'])).'" class="hash"  ">'.$last['name'].' mp3</a></li>';
} 

//что 15 мин база чистится по крону truncate
вопрос как реализовать вот это на memcache?
 
Если нет задачи хранить полную историю поиска, можно и на Memcache реализовать. Как итог получаем простейший код:
PHP:
$mem_cache = new Memcache;
$mem_cache->connect('localhost', 11211);
$lastMem = $mem_cache->get('lastMem');
if(!is_array($lastMem)) {
  $lastMem = array();
}

array_unshift($lastMem, $q);
$lastMem = array_unique($lastMem);
$lastMem = array_slice($lastMem, 0, 30); //оставляем 30 записей

$mem_cache->set('lastMem', $lastMem);

$lastsearch = '';
foreach( $lastMem as $last )
{   
    $last = str_replace(array('<', '>'), '', $last);
    $lastsearch .= '<li><a href="/music/'.urlencode(trim($last)).'" class="hash"  ">'.$last.' mp3</a></li>';
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху