Полный цикл в digital

Кеширование в Битрикс

NoSQL означает не только SQL и это потому, что видов NoSQL используемых в индустрии довольно много. Работают они по-разному, но многие из них могут преминяться для одних и тех же задач.

В своей работе я применяю Redis, служит для хранения записей ключ-значение, может использоваться для различных задач, включая кеширование, логирование, очереди, временные и постоянные значения, в том числе обновляемые. Хранит данные в оперативной памяти, так что для надёжности хранения нужна дополнительная логика по сохранению данных на носитель периодически, либо по вызову событий. Массивы данных могут храниться в виде json строк.

Установка Redis

Актуальная информация на текущий момент времени всегда обновляется, я рекомендую нагуглить информацию но прежде всего смотреть в оригинальной доке Redis. На данный момент годится эта статья.

Если хотим установить Redis не на отдельный сервер, а на машину, нам нужно добавить репозиторий Extra Packages для Enterprise Linux (EPEL):

yum install epel-release

Далее нужно запустить установку самого Redis на сервер:

Redis
yum install redis -y

Поскольку ПО обновляется довольно часто, вполне возможно потребуется установить что-то дополнительно, нужно следовать инструкциям в консоли и гуглить возникающие ошибки, если таковые возникают.

После установки нам нужно запустить БД и автоматизировать её запуск при включении сервера:

sudo systemctl start redis.service
sudo systemctl enable redis

Успешно запущенный сервис Redis можно проверить командой:

redis-cli ping

Безопасность

Безопасность при удалённом и локальном доступе эффективный способ защитить Redis – защитить сервер, на котором он работает, что вполне логично. Firewall и белый список IP неоспоримо необходимые вещи для этого.

Конфигурационный файл Redis находится и правится с помощью редактора nano:

nano /etc/redis.conf

Для локального хоста нужно просто раскомментировать строку bind 127.0.0.1, если нужен внешний ip, прописываем его.

Redis использует порт 6397 по умолчанию, при тонкой настройке файрвола и других сетевых настроек нужно это учитывать.

Настройка пароля Redis находится в том же конфигурационном файле:

nano /etc/redis.conf

Находим и раскомментируем строку:

# requirepass foobared

Пароль можно шифровать и писать что-то сложное, но при этом главное не обмануть самого себя:

echo "password123456" | sha256sum

После установки пароля, сервис также нужно перезапустить, как после установки, мы уже автоматизировали его запуск, так что достаточно:

sudo systemctl restart redis.service

Проверяем пароль, переходим в командную строку Redis командой:

redis-cli

В виде теста пробуем указать ключ-значение:

set key1 10

Если получили ошибку NOAUTH Authentication required, всё работает, пробуем авторизоваться командой, в ответ на которую должны получить OK:

auth ваш_пароль

Если всё действительно хорошо, мы можем покинуть управление Redis:

exit

Получение доступа в PHP

Известных решений для проектов на php несколько, но я всегда выбираю phpredis который доступен на github

Для работы нам потребуется установить pecl:

yum install php-pear php-devel

Следом проводим манипуляции с репозиторием и собираем из него действующий phpredis:

git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure [--enable-redis-igbinary] [--enable-redis-
msgpack] [--enable-redis-lzf [--with-liblzf[=DIR]]] [--
enable-redis-zstd] [--enable-redis-lz4]
make && make install

Устанавдиваем:

yum install php-pecl-redis

Работа с phpredis

На этом этапе, нужно перейти к документации на гитхабе и начинать работу API.

Методы работы с phpredis описаны в документации, либо легко гуглятся.

<?php
//$myRedis = new Redis();
$myRedis = new Redis([
'host' => '127.0.0.1',
'port' => 6379,
'connectTimeout' => 2.5,
'auth' => ['phpredis', 'phpredis'],
'ssl' => ['verify_peer' => false],
'backoff' => [
'algorithm' =>
Redis::BACKOFF_ALGORITHM_DECORRELATED_JITTER,
'base' => 500,
'cap' => 750,
],
]);

Очистка всех ключей в БД:

$redis->flushAll();

Аналитика:

$redis->info();

Сохранение на диск:

$redis->save();

Таймстамп последнего:

$redis->lastSave();

Сохранение данных в БД:

$redis->set('key', 'value');

Чтение данных из БД:

$redis->get('key');

Методов множество, методы поддерживают параметры, удаление по истечению времени и многое другое, возможностей очень много.

Именование ключей

Взять за хорошую практику, стоит правильное именование ключей, если нет опыта работы с nosql, нужно привыкнуть.

В работе нужно использовать именование ключей выраженное смыслом того, за что ключ отвечает:

домен_сервис_параметр

Привмер:

sinteclubricantsru_detailpage_product123456

Для строковых и числовых данных, в value значение подставляется и читается как есть. Массивы отправляем и читаем в value с помощью json json_encode и json_decode соответственно.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг