Как подключить Redis к PHP: примеры кода для работы с ключами, списками, хешами, множествами

Redis позволяет существенно ускорить работу PHP-приложений за счет использования памяти вместо диска для хранения данных. Давайте разберемся, какие преимущества дает интеграция этих двух технологий.

Основы Redis

Redis представляет собой хранилище типа "ключ-значение", работающее в оперативной памяти. В отличие от традиционных реляционных баз данных, в Redis нет таблиц и связей между ними. Вместо этого каждый элемент данных ассоциирован с уникальным ключом.

Благодаря хранению в памяти операции чтения и записи в Redis происходят очень быстро. Кроме того, Redis поддерживает такие типы данных как строки, хеши, списки, множества. Это позволяет гибко структурировать данные для решения разных задач.

Основные возможности Redis:

  • Хранение данных в памяти для высокой скорости доступа
  • Поддержка типов данных: строки, хеши, списки, множества
  • Репликация данных на несколько серверов
  • Механизмы аутентификации и авторизации для безопасности данных

Redis часто используют для таких задач:

  • Кэширование данных
  • Подсчет количества просмотров страниц, кликов
  • Очереди фоновых задач
  • Хранение сессий пользователей

Установить Redis можно на разные операционные системы - Linux, Windows, MacOS. Варианты запуска:

  • Локально на своем компьютере
  • В Docker контейнере
  • В облаке как управляемый сервис (AWS ElastiCache, Azure Cache for Redis и др.)

Интеграция Redis и PHP

Для подключения к Redis из PHP-приложения можно использовать разные клиентские библиотеки. Наиболее популярны phpredis и predis.

phpredis реализован как расширение PHP и обеспечивает максимальную производительность. Однако требует установки дополнительных библиотек при компиляции.

Predis - это чисто PHP решение, которое устанавливается через Composer. Уступает в скорости phpredis, но проще в настройке.

Подключение к Redis с помощью phpredis:

  1. Установить расширение redis
  2. Подключить расширение в php.ini
  3. Создать соединение:
 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); 

Использование Predis:

  1. Установить через composer require predis/predis
  2. Подключиться к Redis:
 $client = new Predis\Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); 

Параметры подключения к Redis можно задать в конфигурационном файле приложения:

 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), ], ], 

При работе с кластером Redis вместо прямого подключения к узлам используется клиентская сегментация. Это позволяет распределять ключи по разным узлам:

'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'clusters' => [ 'default' => [ [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => 0, ], ], ], ], 

В фреймворке Laravel для работы с Redis используется фасад Redis:

 Redis::set('key', 'value'); $value = Redis::get('key'); 
Портрет молодой женщины-программиста, работающей за столом. У нее сосредоточенное выражение лица, брови нахмурены, пальцы быстро порхают по клавиатуре. В очках отражается код, а на многочисленных мониторах видны фрагменты PHP и Redis. На захламленном стол

Основные операции с данными в Redis из PHP

Давайте рассмотрим на конкретных примерах, как выполнять различные операции с данными в Redis из PHP.

Интерьер современной квартиры ночью. Теплый рассеянный свет смешивается с холодным сиянием экрана ноутбука. Рядом стоят две кружки с парящимся чаем. За окном виден ночной городской пейзаж - сверкающие небоскребы на фоне гор в сумеречном фиолетовом небе.

Работа с ключами

Основные команды для работы с ключами в Redis:

  • SET - установить значение для ключа
  • GET - получить значение по ключу
  • DEL - удалить ключ
 // Установка значения $redis->set('username', 'john'); // Получение значения $username = $redis->get('username'); // Удаление ключа $redis->del('username'); 

Работа со списками

Redis поддерживает списки - упорядоченные множества строк. Для работы со списками используются такие команды:

  • LPUSH - добавить в начало списка
  • RPUSH - добавить в конец списка
  • LRANGE - получить диапазон элементов из списка
  • LPOP - извлечь первый элемент из списка
  • RPOP - извлечь последний элемент из списка
 // Добавляем элементы в список $redis->lpush('tasks', 'Task 1'); $redis->lpush('tasks', 'Task 2'); // Получаем все элементы списка $tasks = $redis->lrange('tasks', 0, -1); // Извлекаем элемент из списка $task = $redis->lpop('tasks'); 

Работа с хешами

Хеши в Redis позволяют хранить объекты в виде пар ключ-значение. Основные команды для хешей:

  • HSET - задать значение для поля в хеше
  • HGET - получить значение поля
  • HGETALL - получить все поля хеша
 // Создаем хеш пользователя $redis->hset('user:1', 'name', 'John'); $redis->hset('user:1', 'email', 'john@example.com'); // Получаем имя пользователя $name = $redis->hget('user:1', 'name'); // Получаем весь хеш целиком $user = $redis->hgetall('user:1'); 

Работа с множествами

Множества в Redis позволяют хранить коллекции уникальных неупорядоченных строк. Используются такие команды:

  • SADD - добавить элемент в множество
  • SMEMBERS - получить все элементы множества
  • SDIFF - найти разницу между множествами
 // Добавляем теги в множество $redis->sadd('post:1:tags', 'news'); $redis->sadd('post:1:tags', 'tech'); // Получаем все теги поста $tags = $redis->smembers('post:1:tags'); // Находим уникальные теги $uniqTags = $redis->sdiff('post:1:tags', 'post:2:tags'); 

Сортированные множества

Сортированные множества (sorted sets) в Redis хранят уникальные значения, у которых есть сопоставленный с ними числовой счетчик (score). Элементы автоматически сортируются по этому счетчику. Используются такие команды:

  • ZADD - добавить элемент в множество с указанием score
  • ZRANGE - получить элементы множества в порядке возрастания score
  • ZREVRANGE - получить элементы множества в порядке убывания score
 // Добавляем посты с рейтингом в множество $redis->zadd('posts', 10, 'Post 1'); $redis->zadd('posts', 5, 'Post 2'); // Получаем отсортированные по рейтингу $posts = $redis->zrange('posts', 0, -1); 

Повышение производительности при работе с Redis

Чтобы повысить скорость выполнения операций при работе с данными в Redis из PHP, можно использовать такие механизмы как транзакции и пайплайны.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.