Установка и настройка memcache
Давайте рассмотрим настройку memcached на примере связки memcached + PHP7.
Для начала давайте вспомним для чего нужен memcached.
memcached — это сервис кэширования данных в оперативной памяти на основе хеш-таблиц.
Другими словами, с помощью memcached вы можете кэшировать наиболее часто использующиеся данные в вашем приложении, например на вебсайте.
Установим memcached на ubuntu server
apt-get update
apt-get install memcached php-memcached
Перезапустим сервис memcached
service memcached restart
Убедиться что сервис memcached запущен можно командой:
ps aux | grep memcached
Перезапустим сервис PHP7
service php7.0-fpm restart
Теперь создайте страницу с PHP Info
<?php phpinfo(); ?>
На ней должна появится запись о подключенном модуле memcached
Теперь рассмотрим простой пример на PHP
После установки memcached работает на localhost на порту 11211, к нему мы и подключимся.
Далее мы запишем ключ MYnewDATA с данными — Value Found! I am saved in memcached!
<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);
$result = $mem->get("MYnewDATA");
if ($result) {
echo $result;
} else {
echo "No matching key found yet. Let's start adding that now!";
$mem->set("MYnewDATA", "Value Found! I am saved in memcached!") or die("Value not found in memcached...");
}
?>
При первой загрузке страницы вы должны увидеть надпись — Value not found in memcached…»
При повторной загрузке страницы вы увидите надпись — Value Found! I am saved in memcached!
Это самый простой пример сохранения данных из PHP в memcached , на самом деле методов работы с memcached через PHP намного больше, более подробно все описано тут.
Для просмотра сохраненных ключей можно использовать telnet
telnet localhost 11211
Далее выполнить команд:
stats items
Для просмотра текущих показателей memcached выполните команду:
stats
Для удаления всех значений можно использовать команд:
flush_all
Теперь давайте рассмотрим как работает memcached и как мы можем оптимизировать его работу.
Memcached использует алгоритм выделения памяти SLAB.
В самом SLAB храняться так называемые чанки, в которых храняться данные.
Когда мы сохраняем что-то в memcached , то выбирается пустой SLAB , а в нем пустой чанк.
Чтобы было проще понять иерархию хранения данных в Memcached , то выглядит она так:
SERVER-RAM--->
Память выделенная под Memcached
--->SLAB
--->Chunk
--->Memcached KEY-VALUE
Для обеспечения высокой скорости работы memcached выделяет чанки одинакового размера, если значение которое нужно сохранить в чанк меньше чем сам чанк, то остается свободное место.
Именно свободное место и можно использовать для оптимизации.
Для определения размера минимального размера чанка используется параметр -n , установить минимальный размер чанка в 16 байт можно так:
memcached -n 16
Уменьшать размер чанка имеет смысл только для очень маленьких данных, например для хэшей, логинов, флагов.
Следующий параметр оптимизации -f , это фактор роста, с его помощью можно более эффективно создавать размеры SLAB
memcached -f 1.05
Это имеет смысл когда вы используете для хранения объекты разного размера, от очень маленьких данных до очень больших.
Еще один полезный параметр это -L, он позволяем выделить всю память под memcached сразу при старте.
Это значит что в процессе работы memcached не будет заниматься инициализацией SLAB и чанков.
Еще в конфиге memcached (/etc/memcached.conf) вы можете поменять следующие параметры:
-p 11211 (Используемый порт) -m 4096 (Кол-во выделенной памяти, в данном примере 4 GB) -c 2000 (Лимит на кол-во соединений)
Обратите внимание, если вы выделили memcached 4 GB памяти, а хотите записать данных на 5 GB, то memcached начнет удалять данные по принципу Least Recently Used (LRU)
Это означает что в первую очередь memcached удалит те данные, которые запрашивались очень давно.
Наверное пока это все что хотелось бы рассказать про memcached, возможно в следующей статье я раскрою тему оптимизации более подробно.
Добавить комментарий