Всем уже давно известно, что самые лучшие бинарные файлы — это те, которые были скомпилированы именно на этом компьютере. И, когда вопрос заходит о производительности, то компилирование компонентов на этом компьютере даст свое преимущество в скорости и стабильности.
В данной статье речь пойдет о том, как подготовить Redis, phpredis (С модуль для php) и phpRedisAdmin для работы на боевом сервере.
Для того, чтобы собрать все полноценно, нам нужно иметь на сервере:
- gcc 4.5.2 (Я компилировал под этой версией, но думаю, что с другими проблем не возникнет)
- Make 3.81 (Опять же, версия не принципиальна)
- php5-dev (Версия должна совпадать с версией php)
После того, как мы убедимся, что все зависимости удовлетворены, начинаем собирать все компоненты.
Нам потребуются:
- Redis 2.4.4 Stable
- phpredis 2.1.3
- phpRedisAdmin
Собираем Redis
Для того, чтоб собрать Редис, нам потребуются сами исходники. Получить их можно с github. Поэтому
https://github.com/antirez/redis/zipball/2.4.4 загружаем сразу нужный тег.
$ wget https://github.com/antirez/redis/zipball/2.4.4
$ unzip 2.4.4
$ cd antirez-redis-04bba69
Теперь у нас есть все исходники Redis 2.4.4, осталось их скомпилировать.
Все очень просто
$ make
$ make test
Первой командой мы собрали Redis, второй его проверили на работоспособность.
Make test будет проходить долго (около 2х минут). После теста должна вернуться такая строка "\o/ All tests passed without errors!"
Redis собран, осталось зачистить мусор и унести редис в нужный каталог.
Унесем весь скомпилированный Redis в папку /usr/bin/redis. А чтоб запускать Redis-server, в /usr/bin создадим shell файл redis-server.
Уносим файлы Redis в /usr/bin/redis
Мы все еще остаемся в папке antirez-redis-04bba69, где лежат исходники
$ sudo mkdir /usr/bin/redis
$ sudo cp src/redis-benchmark /usr/bin/redis
$ sudo cp src/redis-check-aof /usr/bin/redis
$ sudo cp src/redis-check-dump /usr/bin/redis
$ sudo cp src/redis-cli /usr/bin/redis
$ sudo cp src/redis-server /usr/bin/redis
$ cd ..
$ rm -rf antirez-redis-04bba69
Мы скопировали все файлы от Redis и удалили папку с исходниками, она нам уже не нужна.
Будьте осторожны с последней командой! sudo для нее не нужен, папка и так в наших владениях.
Теперь нам нужно создать файл для запуска redis-server.
$ sudo vim /usr/bin/redis-server
Вместо vim можете использовать любой другой редактор. Это не принципиально.
В файл вставляем:
cd /usr/bin/redis && ./redis-server redis.conf
Сохраняем, закрываем.
Для этого файла нужно дать право на исполнение.
$ sudo chmod 755 /usr/bin/redis-server
Осталось взять redis.conf
$ cd /usr/bin/redis/
$ sudo wget https://raw.github.com/antirez/redis/unstable/redis.conf
$ sudo vim redis.conf
Redis.conf загружен, осталось его настроить.
Заменяем в файле конфигурации
daemonize no на daemonize yes # Пусть работает как демон
timeout 0 на timeout 30 # В случае баги клиент, который не отсоединяется, навечно зависнет в памяти Redis
loglevel notice на loglevel warning # У нас боевой сервер, минимум отладочных сообщений
Строку 166 нужно расскоментировать и установить пароль к примеру requirepass foobared
Строку 350 комментируем, она не нужна.
Сохраняем, закрываем.
Запуск!
Если все было сделано правильно, то запускаем сервер
$ redis-server
$ telnet localhost 6379
По идее вам должно показать приглашение от Redis
Trying 127.0.1.1…
Connected to localhost.
Escape character is '^]'.
Если вы его получили, значит все отлично, Redis работает.
Тестируем сервер
Теперь мы общаемся с Redis по сокету.
Авторизируемся:
AUTH mypassword
Устанавливаем тестовое значение
SET testkey testvalue
KEYS * # Получаем все ключи
GET testkey # Сервер должен вернуть testvalue
QUIT
Если все прошло успешно, значит сервер работает, и с ним мы заканчиваем. Устанавливаем команду на автозагрузку при старте системы и все.
Redis + PHP5. Компилируем модуль для PHP
Тут тоже все очень просто, так что можно просто следовать командам.
$ cd ~
$ wget https://github.com/nicolasff/phpredis/zipball/2.1.3
$ unzip 2.1.3
$ cd nicolasff-phpredis-43bc590
Тут думаю комментарии не нужны.
Теперь собираем redis.so расширение.
$ phpize
$ ./configure CFLAGS="-O3"
$ make clean all
Теперь в папке modules появился файл redis.so, он-то нам и нужен.
$ sudo cp modules/redis.so /usr/lib/php5/<date>
$ cd ..
$ rm -rf nicolasff-phpredis-43bc590
<date> меняем на имя папки, которое выглядит примерно так: 20090626.
Далее дать информацию php о Redis.so
поэтому
$ sudo vim /etc/php5/apache2/conf.d/redis.ini
и вписываем в него extension=redis.so
По желанию заменяем apache2 на cli, cgi и так далее, в зависимости от того, как у Вас установлен php, и как вы его хотите использовать вместе с Redis.
Теперь рестартим apache2 и в тестовом php файле пишем:
$redis = new Redis();
$redis->connect('localhost:6379');
Если ошибка, что класс Redis не существует, не вылетела, то все отлично.
Проведем benchmark тест непосредственно в php.
try {
$redis = new Redis();
$redis->connect('localhost:6379');
} catch(RedisException $e) {
exit('Connect error');
}
$benchmark = microtime(true);
for($i=0;$i < 80000; $i++)
$redis->set('key','value');
echo microtime(true) - $benchmark;
У меня появилась информация, что 80000 запросов были обработаны за 2.6 секунд.
На этом с php мы закончили. Далее phpRedisAdmin.
Установка phpRedisAdmin
Установка phpRedisAdmin абсолютно не нужна, но для визуализации данных не помешает.
Качаем из git саму админку.
$ cd /var/www
$ git clone git://github.com/ErikDubbelboer/phpRedisAdmin.git redisadmin
$ cd redisadmin
$ chmod 755 -R /var/www/redisadmin
Мы создаем папку redisadmin в /var/www. Добавляем права на файлы, потому что изначально у меня permission denied на redisadmin.
Не забудьте настроить веб-сервер, чтоб сайт можно было открыть уже из сети.
Но использовать redis admin не безопасно на продакшене, поэтому его нужно как ни как закрыть для всех посторонних глаз паролем.
$ vim config.inc.php
Нужно расскоментировать строку 11 и установить пароль к серверу.
Далее нужно расскоментировать блок с 36 по 46 строку, назначив админский пароль, который будет запрашиваться при входе в phpRedisAdmin
PROFIT!
За 15 минут мы смогли поднять Redis сервер, настроить его для работы с PHP и поднять phpRedisAdmin.
комментарии (17)