Всем уже давно известно, что самые лучшие бинарные файлы — это те, которые были скомпилированы именно на этом компьютере. И, когда вопрос заходит о производительности, то компилирование компонентов на этом компьютере даст свое преимущество в скорости и стабильности.
В данной статье речь пойдет о том, как подготовить Redis, phpredis (С модуль для php) и phpRedisAdmin для работы на боевом сервере.
Для того, чтобы собрать все полноценно, нам нужно иметь на сервере:
После того, как мы убедимся, что все зависимости удовлетворены, начинаем собирать все компоненты.
Нам потребуются:
Для того, чтоб собрать Редис, нам потребуются сами исходники. Получить их можно с github. Поэтому
https://github.com/antirez/redis/zipball/2.4.4 загружаем сразу нужный тег.
Теперь у нас есть все исходники Redis 2.4.4, осталось их скомпилировать.
Все очень просто
Первой командой мы собрали Redis, второй его проверили на работоспособность.
Make test будет проходить долго (около 2х минут). После теста должна вернуться такая строка "\o/ All tests passed without errors!"
Redis собран, осталось зачистить мусор и унести редис в нужный каталог.
Унесем весь скомпилированный Redis в папку /usr/bin/redis. А чтоб запускать Redis-server, в /usr/bin создадим shell файл redis-server.
Мы все еще остаемся в папке antirez-redis-04bba69, где лежат исходники
Мы скопировали все файлы от Redis и удалили папку с исходниками, она нам уже не нужна.
Будьте осторожны с последней командой! sudo для нее не нужен, папка и так в наших владениях.
Теперь нам нужно создать файл для запуска redis-server.
Вместо vim можете использовать любой другой редактор. Это не принципиально.
В файл вставляем:
cd /usr/bin/redis && ./redis-server redis.conf
Сохраняем, закрываем.
Для этого файла нужно дать право на исполнение.
Осталось взять redis.conf
Redis.conf загружен, осталось его настроить.
Заменяем в файле конфигурации
daemonize no на daemonize yes # Пусть работает как демон
timeout 0 на timeout 30 # В случае баги клиент, который не отсоединяется, навечно зависнет в памяти Redis
loglevel notice на loglevel warning # У нас боевой сервер, минимум отладочных сообщений
Строку 166 нужно расскоментировать и установить пароль к примеру requirepass foobared
Строку 350 комментируем, она не нужна.
Сохраняем, закрываем.
Если все было сделано правильно, то запускаем сервер
По идее вам должно показать приглашение от Redis
Trying 127.0.1.1…
Connected to localhost.
Escape character is '^]'.
Если вы его получили, значит все отлично, Redis работает.
Теперь мы общаемся с Redis по сокету.
Авторизируемся:
Устанавливаем тестовое значение
Если все прошло успешно, значит сервер работает, и с ним мы заканчиваем. Устанавливаем команду на автозагрузку при старте системы и все.
Тут тоже все очень просто, так что можно просто следовать командам.
Тут думаю комментарии не нужны.
Теперь собираем redis.so расширение.
Теперь в папке modules появился файл redis.so, он-то нам и нужен.
<date> меняем на имя папки, которое выглядит примерно так: 20090626.
Далее дать информацию php о Redis.so
поэтому
и вписываем в него extension=redis.so
По желанию заменяем apache2 на cli, cgi и так далее, в зависимости от того, как у Вас установлен php, и как вы его хотите использовать вместе с Redis.
Теперь рестартим apache2 и в тестовом php файле пишем:
Если ошибка, что класс Redis не существует, не вылетела, то все отлично.
Проведем benchmark тест непосредственно в php.
У меня появилась информация, что 80000 запросов были обработаны за 2.6 секунд.
На этом с php мы закончили. Далее phpRedisAdmin.
Установка phpRedisAdmin абсолютно не нужна, но для визуализации данных не помешает.
Качаем из git саму админку.
Мы создаем папку redisadmin в /var/www. Добавляем права на файлы, потому что изначально у меня permission denied на redisadmin.
Не забудьте настроить веб-сервер, чтоб сайт можно было открыть уже из сети.
Но использовать redis admin не безопасно на продакшене, поэтому его нужно как ни как закрыть для всех посторонних глаз паролем.
Нужно расскоментировать строку 11 и установить пароль к серверу.
Далее нужно расскоментировать блок с 36 по 46 строку, назначив админский пароль, который будет запрашиваться при входе в phpRedisAdmin
PROFIT!
За 15 минут мы смогли поднять Redis сервер, настроить его для работы с PHP и поднять phpRedisAdmin.
В данной статье речь пойдет о том, как подготовить 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.