عميل Redis لـ PHP: Predis و PhpRedis
Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة" يعمل في الذاكرة العشوائية. للتفاعل مع Redis من PHP، هناك طريقتان رئيسيتان: مكتبة PHP الخالصة Predis والإضافة الأصلية PhpRedis. في هذه المقالة، سنشرح بالتفصيل كلتا الأداتين، طريقة تثبيتهما، الأوامر الأساسية، وأمثلة عملية على الاستخدام.
1. Predis – عميل Redis خالص بلغة PHP
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 (مدة الصلاحية)
// حفظ البيانات لمدة ساعة (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' => 'مرحباً بك!']));
// العامل: استلام المهمة (وضع الحظر)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
# أو يدوياً (لينكس)git clone https://github.com/phpredis/phpredis.gitcd phpredisphpize./configuremake && 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";});التخزين المؤقت للهياكل المعقدة
// تخزين نتيجة استعلام SQL مؤقتاً$cacheKey = 'articles:l