Установка Redis
Подключаем Redis. Пример хранения сессий в памяти через Redis
Al-Sher
Всем привет! Для ускорения работы сайта можно действовать по разному и один из действительно хороших способов - хранить часто используемые данные в памяти, то есть в ОЗУ. Раньше я уже писал про использование Memcached, а сегодня я хочу рассказать про его альтернативу - Redis. Изначально следует посмотреть основные отличия:
- возможность сохранять данные на диск;
- возможность хранения массивов;
- однопоточность.
Установка Redis
Давайте сразу перейдем к установке Redis. Установим сам Redis-сервер, к которому будем обращаться в дальнейшем:
- Ubuntu/Debian
sudo apt-get install redis
- CentOS
yum install redis
А теперь установим php-модули для работы с Redis:
- Ubuntu/Debian
sudo apt-get install php-redis
- CentOS
yum install php-redis
Настройка Redis
Что же мы можем настроить в Redis? На самом деле очень многое, но мы воспользуемся лишь основным - прослушиваемыми ip адресом и портом. Все настройки находятся в /etc/redis.conf. Откроем этот файл:
nano /etc/redis.conf
Находим там port и смотрим что он слушает:
port 6379
Чуть ниже можно обнаружить bind, который указывает на ip-адрес, который мы "слушаем". По умолчанию Redis слушает localhost, то есть 127.0.0.1:
bind 127.0.0.1
Не забываем перезагрузить redis после редактирования файла конфигурации:
service redis restart
Хранение сессий в Redis
Сейчас мы заставим наш PHP хранить сессии в Redis. Редактируем php.ini:
nano /etc/php.ini
Там мы ищем следующие строки:
session.save_handler = files
session.save_path = "/tmp"
Возможно путь у ваших сессий другой, так что ищите по самим переменным ? Заменяем найденные строки на:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Перезагружаем php:
service php restart
Для проверки работоспособности следует воспользоваться функцией phpinfo и найти строки, отвечающие за сессии. Если вдруг изменения не произошли, возможно настройки данных переменных уже прописаны в .htaccess или в конфиге php-fpm.
Пример работы с Redis из PHP
Создадим простенький скрипт, который будет записывать в Redis текущее время:
<?php
$Redis = new Redis();
$Redis-?>connect('127.0.0.1', 6379);
$Redis->set('dtime',time());
$time = $Redis->get('dtime');
if($time != '') echo $time;
?>
Разберем наш код: Изначально мы объявляем переменную $Redis, в которой будем хранить соединение с Redis. Используя функцию connect, мы соединяемся с 127.0.0.1:6379, то есть с нашим сервером. Далее мы записываем в переменную dtime значение функции time(). Если значение dtime в Redis не равно пустоте, то выводим его.
Дополнительно
Если Вы храните что-то очень важное в Redis, то рекомендую установить пароль в конфиге Redis:
# requirepass foobared
заменить на
requirepass password
Теперь, без авторизации, Redis будет выводить ошибку
(error) NOAUTH Authentication required.
Авторизуемся:
$Redis->auth('password');
Авторизация проходит уже после подключения к Redis.
Заключение
На этом я хочу закончить данную статью, если у Вас возникли вопросы, то задавайте их в комментариях и я постараюсь Вам помочь :)