Cliente Redis para PHP: Predis y PhpRedis
Redis es un almacén de datos de tipo «clave-valor» de alto rendimiento que funciona en memoria RAM. Para interactuar con Redis desde PHP existen dos enfoques principales: la librería PHP pura Predis y la extensión nativa PhpRedis. En este artículo analizaremos en detalle ambas herramientas, su instalación, comandos básicos y ejemplos prácticos de uso.
1. Predis – Cliente Redis en PHP puro
Predis es una librería escrita completamente en PHP que no requiere la instalación de extensiones adicionales. Es ideal para entornos donde no es posible compilar extensiones en C.
Instalación mediante Composer
composer require predis/predisConexión básica y ejemplos
require 'vendor/autoload.php';
use Predis\\Client;
// Conexión por defecto (localhost:6379)$redis = new Client();
// Alternativamente con parámetros explícitos$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => 'secret', // si está configurado]);
// Trabajo con cadenas simples$redis->set('user:1:name', 'Alejandro');echo $redis->get('user:1:name'); // Alejandro
// Trabajo con listas$redis->rpush('queue:tasks', 'task1', 'task2', 'task3');$task = $redis->lpop('queue:tasks'); // task1
// Trabajo con hashes$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']Caché con TTL (tiempo de vida)
// Guardamos datos por 1 hora (3600 segundos)$redis->setex('weather:spb', 3600, '{"temp": 15, "humidity": 70}');
// Verificamos si la clave existeif ($redis->exists('weather:spb')) { echo $redis->get('weather:spb');} else { // Consulta a API externa y guardado $data = json_encode(['temp' => 15, 'humidity' => 70]); $redis->setex('weather:spb', 3600, $data);}Colas de tareas (listas)
// Añadimos una tarea a la cola$redis->rpush('email:queue', json_encode([ 'to' => 'user@example.com', 'subject' => 'Saludo', 'body' => '¡Bienvenido!']));
// Worker: obtenemos tarea (modo bloqueante)while (true) { $taskRaw = $redis->blpop('email:queue', 5); // timeout de 5 segundos if ($taskRaw) { $task = json_decode($taskRaw[1], true); sendEmail($task['to'], $task['subject'], $task['body']); }}2. PhpRedis – extensión nativa en C
PhpRedis es una extensión para PHP escrita en C. Funciona significativamente más rápido que Predis debido a la mínima sobrecarga. Requiere instalación mediante PECL o compilación.
Instalación
# Mediante PECL (recomendado)pecl install redis
# O manualmente (Linux)git clone https://github.com/phpredis/phpredis.gitcd phpredisphpize./configuremake && make install# Añadir extension=redis.so en php.iniEjemplos de uso
// Conexión$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis->auth('password'); // si hay contraseña configurada
// Set / Get$redis->set('counter', 1);$redis->incr('counter');echo $redis->get('counter'); // 2
// Trabajo con conjuntos$redis->sadd('users:online', 'user1', 'user2', 'user3');$onlineCount = $redis->scard('users:online'); // 3$isOnline = $redis->sismember('users:online', 'user2'); // true
// Pub/Sub (publicador)$redis->publish('channel:news', '¡Nuevo mensaje!');
// Pub/Sub (suscriptor – script separado)$redis->subscribe(['channel:news'], function ($redis, $channel, $message) { echo "Recibido de $channel: $message";});Caché de estructuras complejas
// Cacheamos el resultado de una consulta SQL$cacheKey = 'articles:l También en la biblioteca
Axios — Cliente HTTP para JavaScript (Node.js)
Colas de tareas en Kotlin: Coroutines, Flow y bibliotecas para procesamiento en segundo plano
Biblioteca WebSocket Java: Tyrus — implementación de JSR 356 para tiempo real
Internacionalización (i18n) en JavaScript (Node.js): biblioteca i18next