У меня уже есть "тестовый стенд", его и продолжу мучать.
Сначала обновляем дерево портов:
portsnap fetch update
Ставим расширение memcache для php:
cd /usr/ports/databases/pecl-memcache
make
make install
make clean
В процессе установки нам любезно сообщают о том, что в файл '/usr/local/etc/php/extensions.ini' нужно добавить строку:
extension=memcache.so
Ставим мемкэш:
cd /usr/ports/databases/memcached
make
make install
make clean
В файл /etc/rc.conf добавляем:
memcached_enable="YES"
memcached_flags="-d -l 127.0.0.1 -p 11212 -m 64" # запустить как демона, слушать локалхост порт 11212, максимум 64 мегабайта памяти.
Запускаем мемкэш:
/usr/local/etc/rc.d/memcached start
Проверяем что у нас на порту:
netstat -an | grep 11212
Пишем простенький скрипт для проверки нашего чуда:
<?php $memcache = new Memcache; $memcache->connect('localhost', 11212) or die ("Can't connect"); $time_start = microtime(true); for($i=0;$i<1000000;$i++) { $memcache->set('key' . $i, 'MyTestString', false, 3600) or die ("Storing error"); } echo "Wrire: " . ( microtime(true) - $time_start ) . " seconds\n"; $time_start = microtime(true); for($i=0;$i<1000000;$i++) { $get_result = $memcache->get('key' . $i); } echo "Read: " . ( microtime(true) - $time_start ) . " seconds\n"; ?>
С текущими настройками получаем время (попрошу заметить, что мы пишем и читаем по одному миллиону раз, поэтому и время такое ):
# /usr/local/bin/php /www/localhost/www/index.php
Wrire: 65.182116985321 seconds
Read: 65.040600061417 seconds
Теперь изменим настройки на unix сокет. Для этого поменяем флаги в /etc/rc.conf:
memcached_flags="-d -m 64 -s /tmp/memcached.socket -a 0777"
Перезагружаем мемкэш:
/usr/local/etc/rc.d/memcached restart
И в скрипте изменим настройки подключения на:
$memcache->connect('unix:///tmp/memcached.socket', 0);
Это дает небольшой прирост в скорости:
# /usr/local/bin/php /www/localhost/www/index.php
Wrire: 41.782801151276 seconds
Read: 40.87517285347 seconds
Ну собственно вот и все... Немного побаловались
shutdown -p now