Настраиваем PHP+MemCached
Категория: / DEV Блог
/ Сервер (FreeBSD)
1. Устанавливаем сервер memcached
Настраиваем.
По умолчанию memcached слушает на всех адресах, чего нам не нужно (достаточно localhost).
2. Устанавливаем расширение для php
Прошло нормально? Значит повезло.
У меня FreeBSD пятерка, возникли некоторые проблемы:
которые решались следующим образом.
То есть установка ручками.
Настраиваем php для работы с новоиспеченным модулем.
3. Перезагрузка сервисов
4. Проверяем работу
UPD: memcached не запускатся на интерфейсе 127.0.0.1
После смены операционной системы, внезапно, memcached стал доступен на всех внешних интерфейсах, вместо одного лупбека.
В саппорте ответили: На виртуализации с FreeBSD ПО не будет слушать адрес 127.0.0.1.
В свое время использовалась виртуализация сети Vnet где был данный адрес, но в настоящее время она не используется и не будет использоваться из-за очень нестабильной работы.
Ок, вешаем memcached на юниксовый сокет, что кстати, добавит ему скорости.
В rc.conf в флагах добавляем -s /tmp/memcached.socket -a 0777
Права 777 нужны чтобы вебсервер мог взаимодействовать с мемкэшедом, работающим от другого пользоватя.
Подключаемся к Memcache из php скрипта:
$memcache = new Memcache;
$memcache->connect('unix:///tmp/memcached.socket', 0);
cd /usr/ports/databases/memcached
make && make install && make clean
Настраиваем.
По умолчанию memcached слушает на всех адресах, чего нам не нужно (достаточно localhost).
#./memcached -d -m 2048 -p 11211 -u nobody -l 127.0.0.1
# в rc.conf
memcached_enable="YES"
memcached_flags="-l 127.0.0.1"
2. Устанавливаем расширение для php
pecl install memcache
Прошло нормально? Значит повезло.
У меня FreeBSD пятерка, возникли некоторые проблемы:
/usr/local/bin/phpize: /tmp/download/memcache-2.2.3/build/shtool: Permission denied
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.
которые решались следующим образом.
export PHP_AUTOCONF=autoconf
export PHP_AUTOHEADER=autoheader
phpize
./configure
make
make install
Installing shared extensions: /usr/local/lib/php/20060613/
То есть установка ручками.
Настраиваем php для работы с новоиспеченным модулем.
[root@host /usr/local/etc/php]# tail ./extensions.ini
extension=memcache.so
3. Перезагрузка сервисов
/usr/local/etc/rc.d/memcached.sh start
apachectl restart
4. Проверяем работу
#!/usr/local/bin/php
<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";
$get_result = $memcache->get('key');
echo "Data from the cache:<br/>\n";
var_dump($get_result);
UPD: memcached не запускатся на интерфейсе 127.0.0.1
После смены операционной системы, внезапно, memcached стал доступен на всех внешних интерфейсах, вместо одного лупбека.
В саппорте ответили: На виртуализации с FreeBSD ПО не будет слушать адрес 127.0.0.1.
В свое время использовалась виртуализация сети Vnet где был данный адрес, но в настоящее время она не используется и не будет использоваться из-за очень нестабильной работы.
Ок, вешаем memcached на юниксовый сокет, что кстати, добавит ему скорости.
В rc.conf в флагах добавляем -s /tmp/memcached.socket -a 0777
Права 777 нужны чтобы вебсервер мог взаимодействовать с мемкэшедом, работающим от другого пользоватя.
Подключаемся к Memcache из php скрипта:
$memcache = new Memcache;
$memcache->connect('unix:///tmp/memcached.socket', 0);
cd /usr/ports/devel/pear
make
make install