ديف أوبس

إعداد Redis لجلسات PHP

إعداد خادم Redis كمداول للجلسة (Session Handler) لـ PHP على نظام Ubuntu

يُعد Redis واحدًا من أسرع وأقوى أنظمة التخزين المؤقت (Caching) وقواعد البيانات ذات الأداء العالي، وهو خيار مفضل بشكل متزايد لتخزين جلسات المستخدمين (Sessions) في تطبيقات الويب خاصة تلك المبنية على لغة PHP. يسمح استخدام Redis لتخزين جلسات PHP بتحسين الأداء، زيادة استقرار التطبيقات، وتوفير طريقة موثوقة لإدارة بيانات الجلسات عبر عدة خوادم أو في بيئات توزيع الأحمال (Load Balancing). هذا المقال يعرض شرحًا مفصلًا وشاملًا لكيفية إعداد خادم Redis على نظام Ubuntu، وربطه بـ PHP ليعمل كمداول للجلسة.


مقدمة حول Redis ودوره في إدارة الجلسات

Redis هو مخزن بيانات في الذاكرة يستخدم عادة كقاعدة بيانات NoSQL، مخزن مؤقت، أو وسيط رسائل. من أهم مميزاته السرعة العالية بفضل استخدامه الذاكرة (RAM) لتخزين البيانات، إلى جانب دعمه لأنواع بيانات متنوعة مثل السلاسل النصية، القوائم، التجميعات (Hashes)، والمجموعات.

في سياق PHP، الجلسات هي طريقة لحفظ بيانات المستخدم مؤقتًا بين طلبات HTTP المتتالية. بشكل افتراضي، PHP يخزن الجلسات في ملفات على الخادم، وهذا يمكن أن يسبب مشاكل في الأداء والتزامن خصوصًا في بيئات الخوادم المتعددة. باستخدام Redis كمداول للجلسات، يمكن تحقيق تخزين مركزي عالي الأداء يسهل الوصول إليه من قبل جميع مثيلات تطبيق PHP، مما يحسن سرعة التطبيق ويزيد من استقراره.


1. تحضير البيئة على Ubuntu

1.1 تحديث نظام التشغيل

قبل البدء، يجب التأكد من أن نظام Ubuntu محدّث:

bash
sudo apt update sudo apt upgrade -y

1.2 تثبيت Redis

تأتي توزيعة Ubuntu مع حزمة Redis في مستودعاتها الرسمية، ولتثبيتها:

bash
sudo apt install redis-server -y

بعد التثبيت، يجب تشغيل خدمة Redis والتأكد من تفعيلها تلقائيًا عند بدء التشغيل:

bash
sudo systemctl enable redis-server sudo systemctl start redis-server sudo systemctl status redis-server

1.3 اختبار Redis

يمكن التحقق من عمل Redis بشكل صحيح باستخدام الأمر:

bash
redis-cli ping

ينبغي أن تستجيب Redis بكلمة “PONG”، مما يعني أنها تعمل بشكل سليم.


2. تكوين Redis لتحسين أداء الجلسات

2.1 تعديل ملف إعدادات Redis

افتح ملف الإعدادات الرئيسي لـ Redis:

bash
sudo nano /etc/redis/redis.conf

يمكن ضبط بعض الخيارات لتعزيز استخدام Redis كمدير جلسات، مثل:

  • تفعيل الحماية (إذا كان Redis يُستخدم في بيئة مغلقة فقط أو خلف جدار ناري)

  • تحديد وقت انتهاء الجلسات (يمكن ترك هذا لـ PHP لكن يمكن تزامنه في Redis)

  • إعداد مساحة التخزين المؤقت بشكل مناسب

من الأفضل تعطيل خاصية الحفظ إلى القرص (Persistence) إذا كان Redis يُستخدم فقط كذاكرة مؤقتة للجلسات لضمان سرعة الأداء، وذلك بإلغاء التعليقات أو تعديل:

nginx
save ""

أيضًا، يمكن تحديد إعدادات الأمان مثل السماح بالاتصال فقط من localhost:

nginx
bind 127.0.0.1

أو ضبط كلمة مرور خاصة بـ Redis عبر:

nginx
requirepass your_redis_password

ثم احفظ التغييرات وأعد تشغيل الخدمة:

bash
sudo systemctl restart redis-server

3. إعداد PHP لاستخدام Redis كمداول للجلسات

3.1 تثبيت امتداد PHP الخاص بـ Redis

لربط PHP مع Redis، نحتاج إلى تثبيت امتداد php-redis:

bash
sudo apt install php-redis -y

بعد تثبيت الامتداد، يجب إعادة تشغيل خادم الويب (Apache أو Nginx مع PHP-FPM):

  • إذا كنت تستخدم Apache:

bash
sudo systemctl restart apache2
  • إذا كنت تستخدم Nginx مع PHP-FPM:

bash
sudo systemctl restart php8.1-fpm # تأكد من تعديل الإصدار حسب نسخة PHP المثبتة sudo systemctl restart nginx

3.2 التحقق من تحميل امتداد Redis في PHP

يمكن التأكد من تحميل الامتداد عن طريق إنشاء ملف PHP يحتوي على:

php
phpinfo(); ?>

ثم زيارة الملف من المتصفح والبحث عن قسم Redis.


4. تكوين PHP لاستخدام Redis كمداول للجلسات

يتم ذلك عبر تعديل إعدادات php.ini أو ملفات إعدادات التطبيق.

4.1 تعديل ملف php.ini

ابحث عن ملف php.ini المناسب (يمكن معرفة موقعه عن طريق php --ini أو phpinfo()):

ثم أضف أو عدّل القيم التالية:

ini
session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"
  • session.save_handler: يحدد نوع مداول الجلسة، وهنا يتم تعيينه على Redis.

  • session.save_path: يشير إلى عنوان خادم Redis، هنا على المنفذ 6379 على نفس الجهاز.

في حال استخدام كلمة مرور على Redis:

ini
session.save_path = "tcp://127.0.0.1:6379?auth=your_redis_password"

4.2 إعداد خيارات إضافية

يمكن استخدام خيارات متقدمة للتحكم في مدة بقاء الجلسة على Redis:

ini
session.gc_maxlifetime = 1440 ; الوقت بالثواني (24 دقيقة بشكل افتراضي)

ينصح بمزامنة هذا الوقت مع إعدادات انتهاء الجلسة في Redis.


5. التحقق من عمل الجلسات باستخدام Redis

بعد إتمام الخطوات السابقة، يمكن اختبار عمل الجلسات في بيئة PHP عبر كتابة كود بسيط يقوم بتخزين واسترجاع بيانات الجلسة:

php
session_start(); if (!isset($_SESSION['counter'])) { $_SESSION['counter'] = 1; } else { $_SESSION['counter']++; } echo "عدد زيارات الصفحة: " . $_SESSION['counter']; ?>

مع إعداد Redis بشكل صحيح، ستلاحظ أن قيمة counter تزيد مع كل تحديث للصفحة، والجلسة تُخزن وتُدار عبر Redis.


6. استخدام Redis في بيئات متعددة الخوادم

عندما يعمل تطبيق PHP على أكثر من خادم ويب (خوادم متوازنة)، تخزين الجلسات في ملفات محلية قد يؤدي إلى فقدان الجلسات أو تعارضها. Redis يوفر حلاً مثاليًا حيث يخزن الجلسات في موقع مركزي مشترك.

يتم هنا تعديل session.save_path للإشارة إلى عنوان IP لخادم Redis المشترك:

ini
session.save_path = "tcp://redis-server-ip:6379"

ويُفضل تأمين الاتصال باستخدام جدران حماية أو الشبكات الخاصة الافتراضية (VPN).


7. مقارنة بين تخزين الجلسات في الملفات وRedis

الخاصية تخزين الجلسات في الملفات تخزين الجلسات في Redis
الأداء بطيء نسبياً بسبب عمليات القراءة والكتابة على القرص سريع جداً لكونه يعتمد على الذاكرة
دعم التوزيع محدود، صعب في بيئات الخوادم المتعددة عالي جداً، مناسب للتوزيع
الاستقرار عرضة للمشاكل إذا امتلأت مساحة القرص عالي، يعتمد على إدارة الذاكرة
قابلية التوسع محدود ممتاز، يمكن توسيع الكتلة بسهولة
الأمان متوقف على إعدادات نظام الملفات يمكن تأمينه بكلمات مرور وتشفير

8. تحسينات متقدمة

8.1 استخدام مكتبة Predis أو PhpRedis في التطبيقات الحديثة

في بعض الحالات، قد يرغب المطورون في التعامل مع Redis عبر مكتبات PHP مثل Predis أو PhpRedis لتحكم أكبر، دعم أوامر متقدمة، وربط ديناميكي.

8.2 تفعيل التخزين المؤقت للبيانات الأخرى في Redis

يمكن الاستفادة من Redis أيضًا لتخزين بيانات أخرى مؤقتة مثل بيانات التخزين المؤقت للصفحات، قوائم المستخدمين، أو الرسائل الفورية، مما يجعل Redis مكونًا متعدد الوظائف في التطبيق.


9. ملاحظات أمنية

  • يجب تقييد وصول Redis باستخدام جدار حماية ليقتصر على الخوادم الموثوقة فقط.

  • تفعيل كلمة مرور Redis أمر ضروري في البيئات الإنتاجية.

  • عند استخدام Redis في بيئة شبكية عامة، يفضل استخدام تشفير الاتصال (TLS).

  • مراجعة إعدادات صلاحيات الملفات والخدمات ذات العلاقة.


10. خاتمة

استخدام Redis كمداول للجلسة في PHP على نظام Ubuntu يوفر حلاً فعالاً وقويًا لإدارة الجلسات بشكل مركزي وسريع، مما يسهم بشكل مباشر في تحسين أداء واستقرار التطبيقات. الخطوات السابقة توضح بالتفصيل كيفية تثبيت Redis، تكوينه، ربطه مع PHP، وضبط بيئة العمل لتحقيق أفضل النتائج. اعتماد Redis في إدارة الجلسات هو خيار مثالي للمشاريع التي تحتاج إلى استيعاب عدد كبير من المستخدمين، أو تلك التي تعمل في بيئات متعددة الخوادم وتحتاج إلى تنسيق عالي لجلسات المستخدمين.


المصادر والمراجع


هذا المقال يهدف إلى تقديم شرح مفصل وعملي حول كيفية استخدام Redis لتحسين إدارة جلسات PHP على Ubuntu، مع التركيز على الأداء، الأمان، وسهولة الاستخدام.