Predis для PHP: полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Predis и зачем он нужен

Predis — это полнофункциональный клиент для работы с Redis (Remote Dictionary Server) на языке PHP. Redis — это высокопроизводительное хранилище данных типа «ключ-значение», которое часто используется для кэширования, управления сессиями, очередей сообщений и реального времени. Predis позволяет PHP-приложениям взаимодействовать с Redis-сервером, отправляя команды и получая ответы.

Зачем использовать Predis? В отличие от других клиентов (например, phpredis), Predis написан полностью на PHP и не требует установки дополнительных расширений C. Это делает его идеальным выбором для сред, где вы не можете контролировать установку расширений (например, на общих хостингах). Predis поддерживает все основные возможности Redis: строки, хэши, списки, множества, транзакции, Pub/Sub, кластеризацию и многое другое.

Основные сценарии использования:

  • Кэширование — ускорение работы сайта за счет хранения часто запрашиваемых данных в оперативной памяти.
  • Управление сессиями — хранение сессий пользователей в Redis для быстрого доступа и масштабирования.
  • Очереди задач — организация фоновой обработки задач с помощью списков Redis.
  • Рейтинги и счетчики — использование упорядоченных множеств для построения лидербордов.
  • Pub/Sub — реализация систем обмена сообщениями в реальном времени.

Установка Predis

Predis распространяется через Composer — стандартный менеджер пакетов для PHP. Убедитесь, что у вас установлен Composer. Если нет, скачайте его с getcomposer.org.

Для установки Predis выполните команду в корне вашего проекта:

composer require predis/predis

После установки в вашем проекте появится папка vendor и файл composer.json. Для подключения Predis используйте автозагрузчик Composer:

require 'vendor/autoload.php';

Минимальные требования: PHP 7.2 или выше. Predis не требует установки расширения Redis для PHP, так как он реализует протокол Redis на чистом PHP.

Быстрый старт с примером кода

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

<?php
require 'vendor/autoload.php';

use Predis\Client;

// Создаем клиент Redis (по умолчанию подключается к localhost:6379)
$client = new Client();

// Устанавливаем значение
$client->set('greeting', 'Hello, Redis!');

// Получаем значение
$value = $client->get('greeting');
echo $value; // Выведет: Hello, Redis!

// Проверяем, существует ли ключ
if ($client->exists('greeting')) {
    echo "Ключ существует!";
}

// Удаляем ключ
$client->del(['greeting']);
?>

Этот код делает следующее:

  1. Подключается к Redis-серверу на localhost (порт 6379).
  2. Сохраняет строку "Hello, Redis!" под ключом "greeting".
  3. Читает значение обратно и выводит его.
  4. Проверяет существование ключа.
  5. Удаляет ключ.

Если Redis запущен на другом хосте или порту, передайте параметры подключения:

$client = new Client([
    'scheme' => 'tcp',
    'host'   => '192.168.1.100',
    'port'   => 6379,
]);

Основные методы Predis

Predis предоставляет удобный интерфейс для всех команд Redis. Рассмотрим 10 наиболее часто используемых методов с подробными примерами.

1. set — установка значения

Что делает: Устанавливает значение для указанного ключа. Если ключ уже существует, его значение перезаписывается.

Параметры:

  • $key (string) — имя ключа.
  • $value (mixed) — значение (строка, число, массив будет сериализован).
  • $expireResolution (string, опционально) — единица времени для TTL: 'EX' (секунды), 'PX' (миллисекунды).
  • $expireTTL (int, опционально) — время жизни ключа.
  • $flag (string, опционально) — флаг: 'NX' (установить только если ключ не существует), 'XX' (только если существует).

Пример:

<?php
$client = new Client();

// Простая установка
$client->set('user:1:name', 'Иван');

// Установка с TTL на 60 секунд
$client->set('temp_data', 'Временные данные', 'EX', 60);

// Установка только если ключ не существует
$client->set('unique_key', 'Значение', 'NX');

// Установка только если ключ существует
$client->set('existing_key', 'Новое значение', 'XX');
?>

2. get — получение значения

Что делает: Возвращает значение для указанного ключа. Если ключ не существует, возвращает null.

Параметры:

  • $key (string) — имя ключа.

Пример:

<?php
$client = new Client();
$client->set('name', 'Анна');
$name = $client->get('name');
echo $name; // Анна

$missing = $client->get('nonexistent');
var_dump($missing); // NULL
?>

3. exists — проверка существования ключа

Что делает: Проверяет, существует ли один или несколько ключей. Возвращает количество существующих ключей.

Параметры:

  • $keys (string|array) — один ключ или массив ключей.

Пример:

<?php
$client = new Client();
$client->set('key1', 'value1');
$client->set('key2', 'value2');

// Проверка одного ключа
$exists = $client->exists('key1');
echo $exists; // 1 (истина)

// Проверка нескольких ключей
$count = $client->exists(['key1', 'key2', 'key3']);
echo $count; // 2 (существуют key1 и key2)
?>

4. del — удаление ключей

Что делает: Удаляет один или несколько ключей. Возвращает количество удаленных ключей.

Параметры:

  • $keys (string|array) — ключ или массив ключей для удаления.

Пример:

<?php
$client = new Client();
$client->set('key1', 'value1');
$client->set('key2', 'value2');

// Удаление одного ключа
$deleted = $client->del('key1');
echo $deleted; // 1

// Удаление нескольких ключей
$deleted = $client->del(['key2', 'nonexistent']);
echo $deleted; // 1 (удален только key2)
?>

5. hset и hget — работа с хэшами

Что делает: hset устанавливает поле в хэше. hget получает значение поля из хэша. Хэши Redis идеально подходят для хранения объектов.

Параметры hset:

  • $key (string) — имя хэша.
  • $field (string) — имя поля.
  • $value (mixed) — значение поля.

Параметры hget:

  • $key (string) — имя хэша.
  • $field (string) — имя поля.

Пример:

<?php
$client = new Client();

// Установка полей хэша
$client->hset('user:100', 'name', 'Мария');
$client->hset('user:100', 'email', 'maria@example.com');
$client->hset('user:100', 'age', 28);

// Получение одного поля
$name = $client->hget('user:100', 'name');
echo $name; // Мария

// Получение всех полей хэша
$all = $client->hgetall('user:100');
print_r($all);
// Array ( [name] => Мария [email] => maria@example.com [age] => 28 )
?>

6. lpush и rpop — работа со списками

Что делает: lpush добавляет элемент в начало списка. rpop извлекает и удаляет элемент с конца списка. Списки Redis часто используются для реализации очередей.

Параметры lpush:

  • $key (string) — имя списка.
  • $value (mixed) — значение для добавления (можно передать несколько).

Параметры rpop:

  • $key (string) — имя списка.

Пример:

<?php
$client = new Client();

// Добавление задач в очередь (в начало списка)
$client->lpush('task_queue', 'task1');
$client->lpush('task_queue', 'task2');
$client->lpush('task_queue', 'task3');

// Извлечение задачи из конца списка (FIFO)
$task = $client->rpop('task_queue');
echo $task; // task1 (первая добавленная задача)

// Длина списка
$length = $client->llen('task_queue');
echo $length; // 2
?>

7. sadd и smembers — работа с множествами

Что делает: sadd добавляет один или несколько элементов в множество. smembers возвращает все элементы множества. Множества Redis хранят уникальные значения.

Параметры sadd:

  • $key (string) — имя множества.
  • $members (mixed) — один или несколько элементов для добавления.

Пример:

<?php
$client = new Client();

// Добавление тегов к статье
$client->sadd('article:42:tags', 'php', 'redis', 'database');

// Попытка добавить дубликат (игнорируется)
$client->sadd('article:42:tags', 'php');

// Получение всех тегов
$tags = $client->smembers('article:42:tags');
print_r($tags);
// Array ( [0] => database [1] => php [2] => redis )

// Проверка, есть ли элемент в множестве
$isMember = $client->sismember('article:42:tags', 'php');
echo $isMember; // 1 (истина)
?>

8. zadd и zrange — работа с упорядоченными множествами

Что делает: zadd добавляет элемент с оценкой (score) в упорядоченное множество. zrange возвращает диапазон элементов по их позиции. Используется для рейтингов и лидербордов.

Параметры z

Рекомендаций