Redis-Client für PHP: Predis und PhpRedis – Verbindung und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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/predis


Grundlegende 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ügen


Anwendungsbeispiele

// 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                    

Empfehlungen