Redis клиент для PHP: Predis и PhpRedis – подключение и примеры

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

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

Начать курс

Redis клиент для PHP: Predis и PhpRedis

Redis – это высокопроизводительное хранилище данных типа «ключ-значение», работающее в оперативной памяти. Для взаимодействия с Redis из PHP существует два основных подхода: чистая PHP-библиотека Predis и нативное расширение PhpRedis. В этой статье мы подробно разберём оба инструмента, их установку, основные команды и практические примеры использования.

1. Predis – Pure PHP Redis клиент

Predis – это полностью написанная на PHP библиотека, не требующая установки дополнительных расширений. Она идеально подходит для окружений, где нет возможности компилировать C-расширения.

Установка через Composer

composer require predis/predis

Базовое подключение и примеры

require 'vendor/autoload.php';

use Predis\Client;

// Подключение по умолчанию (localhost:6379)
$redis = new Client();

// Альтернативно с явными параметрами
$redis = new Client([
    'scheme' => 'tcp',
    'host'   => '127.0.0.1',
    'port'   => 6379,
    'password' => 'secret', // если установлен
]);

// Работа с простыми строками
$redis->set('user:1:name', 'Алексей');
echo $redis->get('user:1:name'); // Алексей

// Работа со списками
$redis->rpush('queue:tasks', 'task1', 'task2', 'task3');
$task = $redis->lpop('queue:tasks'); // task1

// Работа с хешами
$redis->hset('user:1', 'email', 'alex@example.com');
$redis->hset('user:1', 'age', 30);
$userData = $redis->hgetall('user:1');
// ['email' => 'alex@example.com', 'age' => '30']

Кэширование с TTL (время жизни)

// Сохраняем данные на 1 час (3600 секунд)
$redis->setex('weather:spb', 3600, '{"temp": 15, "humidity": 70}');

// Проверяем, существует ли ключ
if ($redis->exists('weather:spb')) {
    echo $redis->get('weather:spb');
} else {
    // Запрос к внешнему API и сохранение
    $data = json_encode(['temp' => 15, 'humidity' => 70]);
    $redis->setex('weather:spb', 3600, $data);
}

Очереди задач (списки)

// Добавляем задачу в очередь
$redis->rpush('email:queue', json_encode([
    'to' => 'user@example.com',
    'subject' => 'Приветствие',
    'body' => 'Добро пожаловать!'
]));

// Worker: получаем задачу (блокирующий режим)
while (true) {
    $taskRaw = $redis->blpop('email:queue', 5); // таймаут 5 секунд
    if ($taskRaw) {
        $task = json_decode($taskRaw[1], true);
        sendEmail($task['to'], $task['subject'], $task['body']);
    }
}

2. PhpRedis – нативное C-расширение

PhpRedis – это расширение для PHP, написанное на C. Оно работает значительно быстрее Predis за счёт минимальных накладных расходов. Требует установки через PECL или компиляции.

Установка

# Через PECL (рекомендуется)
pecl install redis

# Или вручную (Linux)
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure
make && make install
# Добавить extension=redis.so в php.ini

Примеры использования

// Подключение
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('password'); // если пароль установлен

// Set / Get
$redis->set('counter', 1);
$redis->incr('counter');
echo $redis->get('counter'); // 2

// Работа с множествами
$redis->sadd('users:online', 'user1', 'user2', 'user3');
$onlineCount = $redis->scard('users:online'); // 3
$isOnline = $redis->sismember('users:online', 'user2'); // true

// Pub/Sub (издатель)
$redis->publish('channel:news', 'Новое сообщение!');

// Pub/Sub (подписчик – отдельный скрипт)
$redis->subscribe(['channel:news'], function ($redis, $channel, $message) {
    echo "Получено из $channel: $message\n";
});

Кэширование сложных структур

// Кэшируем результат SQL-запроса
$cacheKey = 'articles:latest';
$cached = $redis->get($cacheKey);

if ($cached) {
    $articles = json_decode($cached, true);
} else {
    $articles = getArticlesFromDB(); //                    

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