تواصل معي أحد أصحاب المتاجر الإلكترونية، وأخبرني أنه بالرغم من استخدام ذاكرة التخزين المؤقت للصفحات في متجره، إلا أنه لا يزال يعاني من بطء فيه عند تصفحه بواسطة الأعضاء المسجلين أو عندما يتصفح فريق عمله لوحة التحكم.
بعد فحص دقيق تبين لي أن المشكلة كانت في استعلامات قاعدة البيانات، حيث أنها كثيرة وتأخذ وقتًا طويلًا نسبيًا، لكن حتى بعد تنظيف قاعدة البيانات كانت لا تزال المشكلة موجودة، ولذلك توصلت إلى أن الحل يكمن في استخدام تخزين مؤقت على مستوى استعلامات قاعدة البيانات، فبهذه الحالة بدلًا من إجراء استعلامات قاعدة البيانات عند كل زيارة، يتم جلب البيانات مباشرة من ذاكرة التخزين العشوائي حيث تكون جاهزة هناك.
ولتحقيق هذا الغرض، استخدمت نظام Redis، إذ نصبت النظام أولًا على استضافة VPS التي يستخدمها صاحب المتجر، ثم استخدمت إضافة Redis Object Cache لوصل موقع ووردبريس بالنظام، فتحسنت سرعة الموقع بشكل ممتاز للمستخدمين المسجلين.
ما هي Redis وما أهميتها؟
Redis أو REmote DIctionary Server هو نظام تخزين بيانات فائق السرعة في الذاكرة العشوائية RAM، يمكن التفكير فيه كخزانة موجودة بجوار قاعدة البيانات، وبالتالي عند تحميل صفحة بدلًا من أن يذهب ووردبريس إلى قاعدة البيانات الموجودة على القرص الصلب الذي يعد بطيئًا نسبيًا، يجلبها من Redis الموجود على الذاكرة العشوائية التي تمتاز بسرعة كبيرة.
ويعد Redis مهمًا في المواقع التي تتطلب تسجيل العملاء، مثل المتاجر الإلكترونية والمنصات التعليمية، لأن ذاكرة التخزين المؤقت للصفحات تفشل في تسريع تجربة المستخدمين المسجلين، وذلك لأن صفحاتهم ديناميكية ومخصصة لهم، وعادة لا يتم تشغيل التخزين المؤقت للصفحات لهم لكي لا تتسرب معلوماتهم إلى الزوار.
يعالج نظام Redis هذه المشكلة عبر ما يمكن أن نسميه التخزين المؤقت للكائنات (Object Caching)، إذ يخزن نتائج استعلامات قاعدة البيانات المتكررة، مثل إعدادات الموقع، وبيانات المنتجات، في الذاكرة، وهذا يؤدي إلى تخفيف كبير للضغط على قاعدة البيانات، وتسريع عملية جلب البيانات، وبالتالي انخفاض وقت تحميل لوحة التحكم والصفحات الديناميكية.
متطلبات استخدام Redis
Redis ليس إضافة تنصبها على الاستضافة بل هو برنامج يعمل الخادم، ويتصل مع ووردبريس، ولتفعيله على موقعك، يجب أن تمتلك بيئة استضافة ملائمة:
- نوع الاستضافة: يعمل Redis على الاستضافة الافتراضية VPS، والخوادم المخصصة، والاستضافات المدارة، ومن النادر أن يكون مدعومًا في الاستضافات المشتركة.
- وصول إلى الاستضافة عبر سطر الأوامر SSH: لاستخدام Redis ستحتاج إلى تنصيبه على استضافتك إذا كانت VPS أو مخصصة، وهذا يتطلب تنفيذ مجموعة من الأوامر، بينما عادة ما يكون مثبتًا بشكل مسبق على الاستضافات المدارة.
- إضافة ووردبريس: لوصل Redis بووردبريس، يجب تنصيب إضافة تؤدي المهمة. بعض إضافات التخزين المؤقت الشهيرة مثل LiteSpeed Cache تتضمن هذه الوظيفة، لكن توجد إضافة مخصصة لذلك وهي Redis Object Cache.
كيف نصبت Redis على ووردبريس
كانت استضافة العميل هي عبارة عن دروبلت موجود على ديجيتال أوشن، وبما أن هذه الدروبلت هي عبارة عن استضافة VPS، فكان يجب تنصيب Redis عليها، ثم استخدام إضافة لربطه بووردبريس.
تثبيت Redis على الاستضافة
في لوحة تحكم ديجيتال أوشن، نقرت على خيارات الاستضافة، ثم على Access console للوصول إلى سطر الأوامر.

ثم نقرت على زر Launch Droplet Console.

فظهر موجه الأوامر.

بعد ذلك نفذ الأمر التالي لتحديث قائمة البرامج على الخادم، ثم تثبيت Redis مباشرة.
sudo apt update && sudo apt install redis-server -y
بعد ذلك من أجل تأمين Redis وجعله يقبل الاتصال من الخادم نفسه فقط، فتحت ملف redis.conf عبر استخدام الأمر التالي:
sudo nano /etc/redis/redis.conf
ففتح الملف مباشرة في سطر الأوامر.
فتأكدت من أن السطر التالي موجود كما هو وليس قبله علامة # التي تدل على أنه معطل:
bind 127.0.0.1 ::1
ثم أدخلت في السطر الذي بعده السطر التالي، حيث يجب أن تدخل مكان password كلمة مرور صعبة التخمين.
requirepass "password"

بعد ذلك حفظت التغييرات بالنقر على Ctrl + S، ثم خرجت من الملف بالنقر على Ctrl + X، وأعدت تشغيل Redis لتطبيق الإعدادات الجديدة عبر استخدام الأمر التالي:
sudo systemctl restart redis.service
ثم خرجت من نافذة سطر الأوامر وانتقلت إلى الخطوة التالية.
إضافة كود الاتصال بـ Redis في ملف wp-config.php
بعد تنصيب Redis يجب أن نضيف كودًا يساعد ووردبريس على الاتصال به. لذلك استخدمت اتصال FTP للوصول إلى ملفات ووردبريس، ثم توجهت إلى ملف wp-config.php، وأضفت الكود التالي:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PASSWORD', 'password');
حيث وضعت مكان password في نهاية السطر الثاني، كلمة المرور نفسها التي وضعتها في ملف redis.conf عند تأمين Redis.

ثم حفظت التغييرات، وانتقلت إلى الخطوة التالية.
تنصيب إضافة Redis Object Cache والاتصال بـ Redis
نصبت إضافة Redis Object Cache بنفس الطريقة المشروحة في مقال (تنصيب إضافات الووردبريس المجانية والمدفوعة)، ثم انتقلت إلى الإعدادات > Redis، ونقرت على زر Enable Object Cache.

فتم مباشرة تفعيل Redis في موقع ووردبريس.

متى يكون استخدام Redis مناسبًا؟
استخدام Redis مناسب عندما تكون استعلامات قاعدة البيانات المتكررة بطيئة نسبيًا، مثل استعلامات خيارات الموقع من جدول wp_options أو قائمة المقالات من WP_Query أو بيانات المستخدمين.
ويشمل ذلك كلًا من المتاجر الإلكترونية، والمنصات التعليمية، ومواقع العضويات، وأي موقع يستخدم عددًا كبيرًا من الإضافات. كما يعد استخدام Redis مناسبًا أيضًا لتسريع لوحة تحكم ووردبريس، وأيضًا عند استخدام Headless WordPress، حيث يؤدي استخدام Redis إلى تسريع طريقة التخزين المؤقت لنتائج طلبات API الخارجية.
بينما لا يكون لاستخدام Redis داع في المدونات الشخصية، والمواقع التعريفية، والمواقع التي لا تتطلب تسجيل الزوار أو العملاء، حيث تكفي عادة ذاكرة التخزين المؤقت للصفحات لتسريع الموقع للزوار، ولن يحدث استخدام Redis فرقًا ملحوظًا.
مشاكل شائعة عند تفعيل Redis وحلولها
يمكن أن تعاني من بعض المشاكل عند تفعيل Redis، ومن أكثرها شيوعًا:
مشكلة عدم القدرة على الاتصال بـ Redis
بعد تنصيب إضافة Redis Object Cache والانتقال إلى الإعدادات > Redis، قد تلاحظ عدم تفعيل زر Enable Object Cache للاتصال بـ Redis بالرغم من أن نظام Redis منصب على الخادم.

عادة ما يكون سبب ذلك هو خطأ في كلمة المرور عند إدخال كود الاتصال في ملف wp-config.php أو عدم إدخال الكود من الأساس، ولذلك يكون الحل بالتأكد من إدخال كود الاتصال بشكل صحيح.
مشكلة أن المحتوى لا يتحدث
إذا حدثت سعر أحد المنتجات مثلًا في متجرك أو حذفت تعليقًا، لكن الزوار لا يزالون يرون السعر القديم أو التعليق، فقد يكون السبب هو عدم تفريغ ذاكرة التخزين المؤقت الخاصة بـ Redis تلقائيًا، ويمكنك حل المشكلة عبر الانتقال إلى الإعدادات > Redis، ثم النقر على زر Flush Cache.

أخطاء فادحة متعلقة بـ unserialize()
بعد تحديث إضافة أو القالب يمكن أن تتغير بنية أحد كائنات PHP المخزنة في Redis، الأمر الذي يؤدي إلى فشل عملية تسمى Unserialization أو إلغاء التسلسل، وهذا يؤدي إلى خطأ فادح وظهور الخطأ 500 Internal Server Error في الموقع، وعند فحص سجلات الأخطاء ستجد أنها تحتوي على عبارات مثل unserialize() أو Error at offset أو __wakeup().
والحل هنا بتفريغ ذاكرة التخزين المؤقت Redis بالكامل، وبما أنه يتعذر الوصول إلى لوحة تحكم ووردبريس في هذه الحالة، فيجب استخدام WP-CLI عبر سطر الأوامر، حيث يجب تشغيل الأمر التالي في مجلد موقع ووردبريس:
اترك تعليقك