Настраиваем PHP+MemCached

Категория: / DEV Блог / Сервер (FreeBSD)
1. Устанавливаем сервер memcached

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);