عميل Redis لـ PHP: Predis و PhpRedis – الاتصال والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل 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                    

توصيات