Redis и Yii2 - uniqcle/Yii2 GitHub Wiki
Вспомогательные пакеты
sudo apt update
sudo apt full-upgrade
sudo apt install build-essential tcl
Качаем и распаковываем
cd project # Идем в папку с проектом
curl -O http://download.redis.io/redis-stable.tar.gz # Качаем редис
tar xzvf redis-stable.tar.gz # Распаковываем
cd redis-stable # Переходим в папку redis-stable
Компилируем и устанавливаем
make # Компилируем редис
make test # Как скомпилируется, начинаем тестировать загруженный код командой
sudo make install #Если тестирование завершено успешно, то выполним установку командой
Настройка Redis
# Для начала создадим директорию, в которой будет хранится конфигурация.
# Пусть это будет директория /etc/redis
sudo mkdir /etc/redis
# Теперь скопируем файл-образец конфигурации Redis из скаченного нами ранее архива Redis
cp redis.conf /etc/redis
sudo nano /etc/redis/redis.conf #изменим там несколько моментов
supervised no ---> supervised systemd
dir ./ ---> dir /var/lib/redis
В этом файле находим опцию supervised
. По умолчанию она выставлена в no.
Так как мы используем ОС (убунту), где все службы запускаются службой systemd (link is external), то изменим значение данной опции на systemd -- чтобы наш файл /etc/redis/redis.conf выглядел как-то так
. . .......
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
Далее находим опцию dir
в том же файле (опция показывает редису, где хранить свои постоянные данные). Нужно какое-нибудь место, где Редис имеет права на запись, а обычные пользователи не могут просматривать -- будем использовать директорию для этого директорию /var/lib/redis
(создазим её чуть позже, а пока просто измените значение опции в файле) - то есть должно стать как-то так:
...
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
...
Также можно раскомментировать опцию
maxmemory 128 mb
Создаём для Redis файл модуля (systemd)
Далее создадим конфигурационный файл, с помощью которого система сможет руководить процессом Redis. Создадим и откроем файл:
sudo nano /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
Создаём пользователя, группу и директории для процесса (службы) Redis
sudo adduser --system --group --no-create-home redis # Создаём одноимённых пользователя и группу с именем redis
sudo mkdir /var/lib/redis # Далее создадим директорию /var/lib/redis командой
sudo chown redis:redis /var/lib/redis # Далее дадим юзеру и группе redis права владельцев данной директории
sudo chmod 770 /var/lib/redis # Выставим права так, чтобы обычные пользователи не имели доступа к этой директории
Запускаем и проверяем работоспособность
Запускаем Redis Service (службу)
sudo systemctl start redis # Запускаем службу редиса через systemd командой
sudo systemctl restart redis
sudo systemctl stop redis
sudo systemctl status redis # Убеждаемся, что сервер запустился без ошибок командой
sudo systemctl enable redis # Добавляем Redis в автозагрузку
Тестируем подключение к серверу и его работу
redis-cli # Чтобы убедиться, что с сервисом всё ок, запустим программу-клиент
ping # Проверка. Должен быть ответ PONG
info # Вся информация
info memory # Информация по памяти
Команды
set test 100 # Установка значения
get test # Получение значения
set testing "working"
get testing
del testing # Удаление значения
FLUSHALL # Полная очистка кэша
Redis и Yii2
Вставить конфиг в common/config/main-local.php
'cache' => [
'class' => 'yii\redis\Cache',
],
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
Установка библиотеки Redis для yii2:
composer require --prefer-dist yiisoft/yii2-redis
Если композер попросит токен, перейти по этой ссылке и на гитхабе сгенерировать его и вставить в консоль
https://github.com/settings/tokens/new?scopes=repo&description=Composer
Пример кода
namespace frontend\controllers;
use yii\web\Controller;
use frontend\models\Sale;
use yii\helpers\ArrayHelper;
class SaleController extends Controller
{
public function actionIndex(){
$sale = \Yii::$app->cache->get('sale'); //Получаем кэш
if(!$sale) { //Если кэша нет, то получаем данные
$sale = ArrayHelper::getColumn(
Sale::find()->select(['date', 'value'])->asArray()->all(), 'value'
);
array_walk($sale, function (&$item) {
$item = floatval($item);
});
\Yii::$app->cache->set('sale', $sale, 60*2); //Устанавливаем кэш. 3-й параметр время
}
return $this->render('index', [
'sale' => $sale
]);
}
}