Predis — гибкий Redis клиент для PHP
Redis — это высокопроизводительное хранилище данных типа «ключ-значение», которое часто используется для кеширования, сессий, очередей и real-time приложений. Для работы с Redis из PHP существует несколько библиотек, и одна из самых популярных — Predis. Это полностью PHP-реализация клиента, не требующая установки дополнительных расширений (в отличие от phpredis). Predis поддерживает все основные команды Redis, кластеризацию, репликацию, Pub/Sub и работу с транзакциями.
Установка Predis через Composer
Установка Predis осуществляется стандартным способом через Composer. Убедитесь, что Composer установлен в вашем проекте, и выполните команду:
composer require predis/predis
После установки в файле composer.json появится зависимость, а библиотека будет доступна в папке vendor.
Подключение к Redis серверу
Для начала работы создайте экземпляр клиента Predis. По умолчанию он подключается к 127.0.0.1:6379, но вы можете указать свои параметры.
<?php
require 'vendor/autoload.php';
use Predis\Client;
// Подключение с параметрами по умолчанию
$client = new Client();
// Или с явным указанием хоста и порта
$client = new Client([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
]);
// Если требуется пароль
$client = new Client([
'host' => 'localhost',
'port' => 6379,
'password' => 'my_secret_password',
]);
?>
Если Redis запущен на удаленном сервере или использует UNIX-сокет, просто измените соответствующие параметры.
Основные операции с данными
Predis поддерживает все стандартные типы данных Redis: строки, хеши, списки, множества и отсортированные множества. Рассмотрим базовые примеры.
Работа со строками
<?php
// Установить значение
$client->set('user:100:name', 'Иван Петров');
// Получить значение
$name = $client->get('user:100:name');
echo $name; // Иван Петров
// Проверить существование ключа
if ($client->exists('user:100:name')) {
echo 'Ключ существует';
}
// Удалить ключ
$client->del(['user:100:name']);
?>
Работа с хешами
Хеши удобны для хранения объектов — например, данных пользователя.
<?php
// Установить поля хеша
$client->hmset('user:100', [
'name' => 'Анна Смирнова',
'email' => 'anna@example.com',
'age' => 28,
]);
// Получить одно поле
$email = $client->hget('user:100', 'email');
// Получить все поля
$userData = $client->hgetall('user:100');
print_r($userData);
// Увеличить числовое поле
$client->hincrby('user:100', 'age', 1);
?>
Работа со списками
Списки Redis идеально подходят для очередей и логов.
<?php
// Добавить элементы в начало списка (стек)
$client->lpush('tasks', 'task1', 'task2', 'task3');
// Добавить в конец списка (очередь)
$client->rpush('tasks', 'task4');
// Получить все элементы списка
$allTasks = $client->lrange('tasks', 0, -1);
print_r($allTasks);
// Извлечь первый элемент
$first = $client->lpop('tasks');
echo $first; // task3
?>
Установка времени жизни ключа (TTL)
Одна из мощных возможностей Redis — автоматическое удаление ключей через заданное время. Это часто используется для кеширования.
<?php
// Установить ключ с TTL 60 секунд
$client->setex('cache:page', 60, 'HTML-контент страницы');
// Или для уже существующего ключа
$client->expire('cache:page', 120);
// Проверить оставшееся время жизни
$ttl = $client->ttl('cache:page');
echo "Осталось $ttl секунд";
?>
Работа с транзакциями
Predis поддерживает мульти-команды (транзакции) через MULTI и EXEC. Это гарантирует атомарное выполнение группы команд.