Поиск по сайту:

Как установить и использовать Memcache в Ubuntu 12.04


Статус: устарело

В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:

  • Обновите Ubuntu до версии 14.04.
  • Обновление Ubuntu 14.04 до Ubuntu 16.04
  • Перенесите данные сервера в поддерживаемую версию.

Причина:

См. вместо этого:

О кэше памяти

Memcache — это система, которая работает для ускорения виртуальных частных серверов за счет кэширования информации о сервере. Программа позволяет выделить определенный объем оперативной памяти сервера для кэширования недавно запрошенных данных в течение определенного периода времени. Как только данные запрашиваются снова, memcache ускоряет процесс их извлечения, отображая кэшированную информацию, а не генерируя результат из базы данных.

Настраивать

Шаги, описанные в этом руководстве, требуют наличия у пользователя привилегий root. Вы можете увидеть, как это настроить, в учебнике для основных пользователей.

sudo apt-get update

Кроме того, на виртуальном сервере должны быть установлены MySQL и PHP.

sudo apt-get install mysql-server php5-mysql php5 php5-memcache

Установить кэш памяти

Установка memcache выполняется в несколько шагов.

Для начала установите memcached через apt-get.

sudo apt-get install memcached

Следующим шагом будет установка php-pear, репозитория, в котором хранится memcache.

sudo apt-get install php-pear

Если на вашем сервере нет компилятора, вы можете скачать build-essential для установки memcache:

sudo apt-get install build-essential

Наконец, используйте PECL (библиотека сообщества расширений PHP) для установки memcache:

sudo pecl install memcache

Скажите «да», нажав клавишу «Ввод» во время установки, когда вас спросят, хотите ли вы «Включить поддержку обработчика сеанса memcache? [да] :»

После завершения установки memcache с PECL на VPS добавьте memcached в memcache.ini:

echo "extension=memcache.so" | sudo tee /etc/php5/conf.d/memcache.ini

Теперь вы готовы начать использовать Memcache.

Подтвердите Memcache и посмотрите статистику

После загрузки Memcache вы можете проверить, установлен ли он, выполнив поиск:

ps aux | grep memcache

Кроме того, вы можете просмотреть статистику кэша памяти, набрав:

echo "stats settings" | nc localhost 11211

Шаг третий — как работает Memcache

Memcache работает, перенаправляя код на первую попытку извлечения данных из кеша, прежде чем запрашивать базу данных сервера. Кэш заполняется путем сохранения недавно полученных данных сервера в течение определенного периода времени. За счет кэширования недавно запрошенной информации будущим запросам не нужно проходить более длительный процесс извлечения информации из базы данных, а вместо этого можно получить к ней доступ через кэш.

Страница memcache показывает этот сокращенный код на своей домашней странице, чтобы обобщить процесс memcache:

function get_foo(foo_id)
    foo = memcached_get("foo:" . foo_id)
    return foo if defined foo

    foo = fetch_foo_from_database(foo_id)
    memcached_set("foo:" . foo_id, foo)
    return foo
end

Простой пример кэша памяти

В этом разделе будет создан простой php-скрипт для использования кэша памяти для извлечения одного значения, изначально найденного в таблице mysql.

Следующие шаги настраивают пользователя mysql, который может получить доступ к соответствующей базе данных, создать таблицу для запроса и вставить одно значение, которое мы будем тестировать, в новую таблицу mysql.

Войдите в mysql: mysql -u root -p и выполните следующие команды:

use test;

grant all on test.* to test@localhost identified by 'testing123';

create table example (id int, name varchar(30));

insert into example values (1, "new_data");

exit;

После выхода из MySQL создайте файл сценария memcache:

nano memtest.php

Теперь мы собираемся создать php-скрипт шаг за шагом (весь скрипт будет в конце раздела):

  • Start off by creating a new persistent connection with memcache, which runs on memcache’s default port, 11211.
    <?php
    $meminstance = new Memcache();
    $meminstance->pconnect('localhost', 11211);
  • The next step is to connect to the new mysql database with the user that we created earlier:
    mysql_connect("localhost", "test", "testing123") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());
  • After that, go ahead and create the query that we will pose to the server, as well as provide a key to identify that specific action:
    $query = "select id from example where name = 'new_data'";
    $querykey = "KEY" . md5($query);
  • The script first searches the cache for the answer to the query. If the result does not exist, the script reroutes the question to the original database. Once the query has been answered by the original database, the script stores the result in memcache, using the “set” command-- which both saves it and allows the user to designate the number of seconds that it should remain in the cache (600 would save it in the cache for 10 minutes).

    When we run the script for the first time, it will inform us that the data was collected from the mysql database. However, as it does so, it stores the information in the cache, so that a second run of the script retrieves it from the cache and lets the user know.

    In 10 minutes the cache is emptied once more and running the script will make it access the database once again.

    $result = $meminstance->get($querykey);
    
    if (!$result) {
           $result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
           $meminstance->set($querykey, $result, 0, 600);
    print "got result from mysql\n";
    return 0;
    }
    
    print "got result from memcached\n";
    return 0;
    
    ?>

В целом скрипт выглядит так:

<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

$result = $meminstance->get($querykey);

if (!$result) {
       $result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
       $meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}

print "got result from memcached\n";
return 0;

?>

Запуск сценария в командной строке приводит к следующим результатам:

# php memtest.php 
got result from mysql

# php memtest.php 
got result from memcached

# php memtest.php 
got result from memcached

Заключение

В этом руководстве рассматривается ускорение извлечения данных из базы данных путем подключения ее к кэшу памяти. Однако имейте в виду, что сила memcache заключается в том, что это кеш, а не хранилище данных. При использовании memcache не ожидайте, что он заменит базу данных. Поскольку memcache хранит значения для заданного ключа только в течение заданного периода времени, вы не всегда можете найти нужную информацию в кэше, и в таких случаях наличие исходной базы данных сервера является обязательным.

Тем не менее, memcache — очень полезная программа, которая может многое сделать для повышения эффективности работы сервера.

Если у вас есть другие вопросы о Memcache, не стесняйтесь задавать их на нашем форуме.