Redis-Client für PHP: Predis und PhpRedis
Redis ist ein leistungsstarker In-Memory-Datenspeicher vom Typ „Schlüssel-Wert“. Für die Interaktion mit Redis aus PHP gibt es zwei Hauptansätze: die reine PHP-Bibliothek Predis und die native Erweiterung PhpRedis. In diesem Artikel werden wir beide Werkzeuge, ihre Installation, grundlegende Befehle und praktische Anwendungsbeispiele im Detail besprechen.
1. Predis – Pure PHP Redis-Client
Predis ist eine vollständig in PHP geschriebene Bibliothek, die keine Installation zusätzlicher Erweiterungen erfordert. Sie ist ideal für Umgebungen, in denen keine C-Erweiterungen kompiliert werden können.
Installation über Composer
composer require predis/predisGrundlegende Verbindung und Beispiele
require 'vendor/autoload.php';
use Predis\\Client;
// Standardverbindung (localhost:6379)$redis = new Client();
// Alternativ mit expliziten Parametern$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => 'secret', // falls gesetzt]);
// Arbeiten mit einfachen Strings$redis->set('user:1:name', 'Alexej');echo $redis->get('user:1:name'); // Alexej
// Arbeiten mit Listen$redis->rpush('queue:tasks', 'task1', 'task2', 'task3');$task = $redis->lpop('queue:tasks'); // task1
// Arbeiten mit 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']Caching mit TTL (Lebensdauer)
// Daten für 1 Stunde (3600 Sekunden) speichern$redis->setex('weather:spb', 3600, '{"temp": 15, "humidity": 70}');
// Prüfen, ob der Schlüssel existiertif ($redis->exists('weather:spb')) { echo $redis->get('weather:spb');} else { // Anfrage an externe API und Speicherung $data = json_encode(['temp' => 15, 'humidity' => 70]); $redis->setex('weather:spb', 3600, $data);}Aufgabenwarteschlangen (Listen)
// Aufgabe zur Warteschlange hinzufügen$redis->rpush('email:queue', json_encode([ 'to' => 'user@example.com', 'subject' => 'Begrüßung', 'body' => 'Willkommen!']));
// Worker: Aufgabe abrufen (blockierender Modus)while (true) { $taskRaw = $redis->blpop('email:queue', 5); // Timeout 5 Sekunden if ($taskRaw) { $task = json_decode($taskRaw[1], true); sendEmail($task['to'], $task['subject'], $task['body']); }}2. PhpRedis – native C-Erweiterung
PhpRedis ist eine in C geschriebene Erweiterung für PHP. Sie arbeitet aufgrund minimaler Overheads deutlich schneller als Predis. Erfordert Installation über PECL oder Kompilierung.
Installation
# Über PECL (empfohlen)pecl install redis
# Oder manuell (Linux)git clone https://github.com/phpredis/phpredis.gitcd phpredisphpize./configuremake && make install# extension=redis.so in php.ini hinzufügenAnwendungsbeispiele
// Verbindung$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis->auth('password'); // falls Passwort gesetzt
// Set / Get$redis->set('counter', 1);$redis->incr('counter');echo $redis->get('counter'); // 2
// Arbeiten mit Mengen$redis->sadd('users:online', 'user1', 'user2', 'user3');$onlineCount = $redis->scard('users:online'); // 3$isOnline = $redis->sismember('users:online', 'user2'); // true
// Pub/Sub (Herausgeber)$redis->publish('channel:news', 'Neue Nachricht!');
// Pub/Sub (Abonnent – separates Skript)$redis->subscribe(['channel:news'], function ($redis, $channel, $message) { echo "Erhalten von $channel: $message";});Caching komplexer Strukturen
// Ergebnis einer SQL-Abfrage cachen$cacheKey = 'articles:l Auch in der Bibliothek
CLI-Framework für JavaScript (Node.js): Commander.js – Erstellung von Konsolenanwendungen
Kotlinx.serialization und Valiktor: Datenvalidierung in Kotlin
GraphQL für Swift: Apollo iOS — Client für iOS und macOS