تخطَّ إلى المحتوى

ما هو Redis؟ فوائده لتطبيقاتك وكيف تضبطه على خادمك

القسم 1 من 13
الحجم 3 من 5

الاستضافة03/08

ما هو Redis؟ فوائده لتطبيقاتك وكيف تضبطه على خادمك

Redis يحفظ البيانات في الذاكرة فيسرّع تطبيقك ويخفف الحمل عن قاعدة البيانات: فوائده، وكيف تثبّته وتضبط أمانه وذاكرته وحفظه على خادم Linux، وتربطه بـ WordPress وLaravel.

عبد الواحد محمدكاتب محتوى في tech+20 دقيقة قراءة

يفتح زائر صفحة منتج في متجر إلكتروني، فينفّذ الموقع عشرات الاستعلامات على قاعدة البيانات ليعرض السعر والصور والتقييمات والسلة. ثم يفتحها زائر آخر بعد ثانية، فيعيد الموقع الاستعلامات نفسها ليحصل على النتائج نفسها. هذا التكرار هو ما وُجد Redis ليختصره: مخزن بيانات يعمل في ذاكرة الخادم، يحفظ النتائج الجاهزة ويعيدها في أقل من ملّي ثانية غالباً، فيخف الحمل عن قاعدة البيانات ويسرع الموقع. ويستعمله WordPress وLaravel وMagento وكثير غيرها للتخزين المؤقت والجلسات وطوابير المهام. في هذا المقال: ما هو Redis وكيف يعمل، وما الذي يقدّمه لتطبيقك ومتى لا يناسبه، ثم كيف تثبّته على خادم Linux وتضبط أمانه وذاكرته وحفظه على القرص وإعدادات النظام حوله، وكيف تربط به تطبيقك وتراقبه وتحدّثه.

01ما هو Redis وكيف يعمل

اسم Redis اختصار لـ REmote DIctionary Server، أي «خادم القاموس البعيد». بدأه المبرمج الإيطالي Salvatore Sanfilippo ليحمل ضغط أداة كان يبنيها لتحليل السجلات لحظة بلحظة، ثم نشره مشروعاً مفتوح المصدر انتشر في تطبيقات الويب حول العالم. وهو : يحفظ بياناته كلها في ذاكرة الخادم RAM، ويستعمل القرص للحفظ والاستعادة فقط. لذلك يقرأ ويكتب أسرع بكثير من قاعدة بيانات تقرأ من القرص، مقابل أن حجم بياناته محدود بحجم الذاكرة.

كل ما في Redis مفاتيح وقيم: تكتب قيمة باسم، مثل product:1042، ثم تقرؤها بالاسم نفسه. لكن القيمة ليست نصاً فقط، بل بنية بيانات لها أوامرها:

النوعما يحفظهاستخدام نموذجي
Stringنص أو رقم أو بيانات مسلسلةنتيجة استعلام جاهزة، عدّاد
Hashحقول وقيمها تحت مفتاح واحدبيانات مستخدم أو منتج
Listقائمة مرتبة تضيف إلى طرفيهاطابور مهام بسيط
Setعناصر فريدة بلا ترتيبوسوم، زوار فريدون
Sorted Setعناصر فريدة لكل منها درجةالأكثر مبيعاً
Streamسجل أحداث تقرؤه مجموعات من العمّالطوابير موثوقة وإشعارات

ومنذ Redis 8 صارت أنواع أخرى جزءاً من النسخة المفتوحة نفسها، منها JSON والسلاسل الزمنية والبحث ومجموعات المتجهات التي تحتاجها تطبيقات الذكاء الاصطناعي.

ولكل مفتاح أن يحمل : تحدد له عدد الثواني، فيحذفه Redis وحده حين تنتهي. وعلى هذا يقوم التخزين المؤقت كله: نسخة جاهزة تعيش دقائق ثم تختفي، فيجلب التطبيق نسخة جديدة من قاعدة البيانات.

وينفّذ Redis الأوامر واحداً بعد الآخر على خيط رئيسي واحد، فلا يتداخل أمران أبداً: إن زاد عميلان العدّاد نفسه في اللحظة نفسها بالأمر INCR، زاد مرتين لا مرة. ولا يبطئه ذلك كما قد يُظن، لأن عمله في الذاكرة لا ينتظر القرص، ويقول توثيقه إن نسخة واحدة على خادم Linux عادي تخدم نحو مليون طلب في الثانية حين تُرسل الأوامر دفعات. والذاكرة التي يحتاجها أقل مما يتوقع كثيرون: مليون مفتاح صغير بقيم نصية يشغل نحو 85 ميغابايت.

02ماذا يقدّم Redis لتطبيقك

أكثر ما يُستعمل Redis له تخفيف الحمل عن قاعدة البيانات الرئيسية، MariaDB أو MySQL أو PostgreSQL، لكنه يقدّم أكثر من ذلك:

  • تخزين نتائج الاستعلامات: يبحث التطبيق عن النتيجة في Redis أولاً، فإن لم يجدها سأل قاعدة البيانات وحفظ الجواب بمدة صلاحية. هذا ، وهو أبسط طريقة لتسريع الصفحات الثقيلة.
  • التخزين المؤقت للكائنات في WordPress: تخزين الصفحات لا يفيد الزائر المسجل ولا السلة ولا لوحة التحكم، فيحفظ WordPress نتائج استعلاماته وإعداداته في Redis بدل أن يكررها مع كل طلب، كما شرحنا في دليل استضافة WordPress المحسّنة.
  • جلسات المستخدمين: تُحفظ جلسة الدخول والسلة في Redis، فتبقى إن أُعيد تشغيل التطبيق، وتعمل على أكثر من خادم تطبيق معاً، وتنتهي وحدها بمدة صلاحيتها.
  • طوابير المهام: إرسال البريد وتصغير الصور وإنشاء الفواتير تنتقل إلى طابور في Redis، فيرد الموقع على الزائر فوراً، وينجز عامل في الخلفية المهمة بعد لحظات. على هذا تعمل طوابير Laravel وأدوات مثل Sidekiq وBullMQ.
  • العدّادات وحدود الطلبات: الأمر INCR يزيد العدّاد في خطوة واحدة لا تتداخل، فتعدّ به محاولات الدخول الفاشلة من كل عنوان IP وتوقفها بعد حد معين، أو تحد عدد طلبات واجهتك البرمجية في الدقيقة.
  • لوحات الترتيب: المجموعة المرتبة تُبقي عناصرها مرتبة بدرجاتها دائماً، فتعرض «الأكثر مبيعاً هذا الأسبوع» دون أن تحسبها قاعدة البيانات مع كل زيارة.
  • الرسائل الفورية: بالنشر والاشتراك (Pub/Sub) أو بالـ Streams تنقل الإشعارات بين أجزاء تطبيقك، كرسالة «طلب جديد» تظهر في لوحة المتجر لحظة الدفع.
  • الأقفال بين العمليات: الأمر SET مع الخيار NX لا يكتب إلا إن كان المفتاح غير موجود، فيمنع عاملين من تنفيذ المهمة نفسها مرتين.

وهذا كله بأوامر قصيرة. هذه جلسة في redis-cli لمتجر حلويات في مدينة الكويت، يحفظ صفحة منتج عشر دقائق، ويعدّ محاولات الدخول الفاشلة، ويرتب منتجاته بمبيعاتها:

أوامر Redis الأساسية في redis-cli
# صفحة منتج جاهزة، تبقى عشر دقائق ثم تُحذف وحدهاSET page:product:1042 "<html>…</html>" EX 600TTL page:product:1042# (integer) 600# محاولة دخول فاشلة من عنوان، والعدّاد يُصفَّر بعد ربع ساعةINCR login:fail:198.51.100.7EXPIRE login:fail:198.51.100.7 900 NX# المنتجات الأكثر مبيعاً هذا الأسبوعZINCRBY top:week 3 "product:1042"ZREVRANGE top:week 0 4 WITHSCORES

التخزين المؤقت الجانبي في PHP

هكذا يبدو النمط في شيفرة PHP بإضافة phpredis، ومثله في كل لغة:

نمط التخزين المؤقت الجانبي في PHP
$redis = new Redis();$redis->connect("127.0.0.1", 6379);$redis->auth(["app", getenv("REDIS_PASSWORD")]);$key = "product:1042";$product = $redis->get($key);if ($product === false) {    // ليس في Redis: اسأل قاعدة البيانات واحفظ الجواب عشر دقائق    $product = json_encode(loadProductFromDatabase(1042));    $redis->setex($key, 600, $product);}

والجزء الذي يُنسى: حين يتغير السعر في قاعدة البيانات، احذف المفتاح بالأمر DEL product:1042، أو اقبل أن يرى الزوار السعر القديم حتى تنتهي صلاحيته. واختر مدة الصلاحية بحسب ما يحتمله كل نوع من البيانات: ثوانٍ للمخزون، وساعات لصفحة «من نحن».

03متى لا يناسبك Redis

Redis أداة قوية، لكنه ليس الجواب عن كل شيء:

  • بيانات أكبر من الذاكرة: كل بيانات Redis في RAM، فإن كانت بياناتك عشرات الغيغابايتات، فستكلفك الذاكرة أكثر بكثير من القرص.
  • مصدر وحيد لبيانات لا تحتمل الضياع: Redis يكمّل قاعدة بياناتك ولا يحل محلها. الطلبات والفواتير وحسابات المستخدمين مكانها MariaDB أو PostgreSQL، وفي Redis نسخ منها أو بيانات يمكن إعادة بنائها.
  • الاستعلامات المعقدة والتقارير: لا جداول في Redis ولا ربط بينها ولا SQL. التقارير التي تجمع وتصفّي وتربط مكانها قاعدة بيانات علائقية.
  • موقع صغير يكفيه تخزين الصفحات: إن كان موقعك صفحات شبه ثابتة يخدمها LiteSpeed Cache، فقد لا يضيف Redis فرقاً يُذكر. قِس أولاً، ثم أضفه حيث يبطؤ الموقع.

04تثبيت Redis على خادم Linux

إن كان تطبيقك على خادم تديره بنفسك، مثل خادم VPS، فتثبيت Redis مسألة دقائق.

على Ubuntu وDebian

في مستودعات التوزيعة نسخة من Redis، لكنها قد تكون أقدم من آخر إصدار. ولآخر نسخة، أضف مستودع Redis الرسمي:

تثبيت Redis من مستودعه الرسمي على Ubuntu وDebian
sudo apt-get install lsb-release curl gpgcurl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpgsudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.listsudo apt-get updatesudo apt-get install redis# يبدأ Redis وحده بعد التثبيت، فتأكد أنه يردredis-cli ping

يجب أن يرد الأمر الأخير بـ PONG. واسم الخدمة redis-server، وملف إعدادها /etc/redis/redis.conf.

على AlmaLinux وRocky Linux

في الإصدار 9 تجد Redis في مستودع AppStream. أما الإصدار 10، ومثله Red Hat Enterprise Linux 10، فيأتي بـ Valkey بدل Redis، وهو متوافق معه:

تثبيت Redis أو Valkey على AlmaLinux وRocky
# AlmaLinux أو Rocky 9sudo dnf install redissudo systemctl enable --now redisredis-cli ping# AlmaLinux أو Rocky 10: الأداة valkey-cli، والإعداد في /etc/valkey/valkey.confsudo dnf install valkeysudo systemctl enable --now valkeyvalkey-cli ping

وتحقق من النسخة بالأمر redis-server --version. النسخة التي تأتي بها التوزيعة قد تكون أقدم من آخر إصدار، فتأكد أن التوزيعة ما زالت ترسل لها الإصلاحات الأمنية.

05اضبطه بأمان قبل أي شيء

صُمم Redis ليتحدث إليه عملاء موثوقون في شبكة موثوقة، لا ليُفتح للإنترنت. ومع ذلك وجدت شركة Wiz في 10/2025 نحو 330 ألف نسخة Redis مكشوفة على الإنترنت، منها نحو 60 ألفاً بلا أي كلمة مرور. ومن يصل إلى Redis مفتوح يستطيع أن يمسح بياناته كلها بأمر واحد، أو أن يستغل ثغرة فيه ليشغّل شيفرة على الخادم.

والخبر الجيد أن ملف redis.conf الذي يأتي مع Redis آمن نسبياً: يستمع على 127.0.0.1 وحده، و«الوضع المحمي» مفعّل فيه، فيرفض الاتصال من خارج الخادم ما دام بلا كلمة مرور. والخطر يبدأ حين يغيّر أحد ذلك ليتصل من خادم آخر. فثبّت هذه الأسطر:

إعداد الشبكة في redis.conf
# /etc/redis/redis.conf# لا تستمع إلا على الخادم نفسهbind 127.0.0.1 -::1protected-mode yesport 6379# إن كان التطبيق على الخادم نفسه، فالمقبس أسرع ويغلق الشبكة كلها:# port 0# unixsocket /run/redis/redis.sock# unixsocketperm 770

ومع المقبس، أضف مستخدم خادم الويب إلى مجموعة redis ليستطيع الاتصال، مثل: sudo usermod -aG redis www-data.

كلمات المرور والصلاحيات

منذ Redis 6 تُدار كلمات المرور بـ : مستخدمون بأسماء، لكل منهم كلمة مرور وأوامر ومفاتيح مسموح بها. أنشئ كلمة مرور قوية بالأمر ACL GENPASS، فهو يعطيك 64 حرفاً عشوائياً، ثم عرّف المستخدمين في ملف الإعداد:

مستخدمو Redis وصلاحياتهم في redis.conf
# كلمة مرور عشوائية طويلة. شغّله مرتين، وضع الناتجين مكان APP_PASSWORD وADMIN_PASSWORDredis-cli ACL GENPASS# في /etc/redis/redis.conf:# المستخدم الافتراضي يدخل بلا كلمة مرور، فعطّلهuser default off# التطبيق: كل الأوامر إلا أوامر الإدارة ومسح القواعد كلهاuser app on >APP_PASSWORD ~* &* +@all -@admin -flushall# المدير: لك وحدك، من الطرفيةuser admin on >ADMIN_PASSWORD ~* &* +@all

ثم أعد تشغيل Redis، وادخل بعدها باسم المستخدم: redis-cli --user admin --askpass. وإن كان تطبيقك لا يرسل اسم مستخدم، فاترك المستخدم default مفعّلاً وضع له كلمة مرور بالسطر القديم requirepass، فهو يكفي لتطبيق واحد.

وثلاث قواعد أخرى:

  • لا تشغّله بصلاحيات root: الحزم الرسمية تشغّله بمستخدم redis، فأبقِه كذلك.
  • لا تفتح المنفذ 6379 للعالم: إن احتاج خادم آخر أن يصل إليه، فاجعله يستمع على عنوان الشبكة الخاصة، واسمح في الجدار الناري لعنوان ذلك الخادم وحده، وفعّل TLS إن مرّت البيانات على شبكة لا تثق بها.
  • أبقِ الإعدادات المحمية مغلقة: منذ Redis 7 يمنع الإعداد enable-protected-configs، وهو معطّل افتراضياً، تغيير مجلد الحفظ واسم ملفه أثناء التشغيل. وهي الحيلة التي استعملها المهاجمون قديماً ليكتبوا مفاتيح SSH على الخادم، فلا تفتحه.

وتأكد من النتيجة: الأمر الأول يجب أن يُظهر Redis يستمع على 127.0.0.1 وحده، والثاني يجب أن يُرفض بخطأ NOAUTH:

التحقق من إعداد الشبكة وكلمة المرور
# على أي عنوان يستمع Redis؟sudo ss -ltnp | grep 6379# بلا مستخدم وكلمة مرور يجب أن يُرفضredis-cli ping

06حدّد الذاكرة وسياسة الإخلاء

إن لم تحدد لـ Redis سقفاً، فسيأخذ من الذاكرة ما يشاء: على أنظمة 64 بت لا سقف افتراضياً، حتى يقتله النظام حين تنفد الذاكرة. فحدد له سقفاً بالإعداد maxmemory، واترك تحته هامشاً: يقول توثيق Redis إن كانت لديك 10 غيغابايت حرة فاجعل السقف 8 أو 9، لأن Redis يحتاج ذاكرة فوق بياناته، وقد تتضاعف حاجته أثناء الحفظ على القرص في تطبيق كثير الكتابة.

ثم اختر ، أي ما يفعله Redis حين يبلغ السقف:

السياسةما تفعلهمتى تختارها
noevictionلا تحذف شيئاً، وترفض كل كتابة جديدة بخطأالافتراضية. للجلسات والطوابير التي لا تحتمل الضياع
allkeys-lruتحذف المفاتيح التي لم تُطلب منذ أطول وقتتخزين مؤقت خالص، وهي الخيار الآمن إن لم تكن متأكداً
allkeys-lfuتحذف المفاتيح الأقل طلباًحين تبقى قلة من البيانات مطلوبة دائماً
volatile-lruمثل allkeys-lru، بين المفاتيح التي لها مدة صلاحية فقطنسخة تجمع تخزيناً مؤقتاً وبيانات دائمة
volatile-ttlتحذف المفاتيح الأقرب إلى انتهاء صلاحيتهاحين يحدد تطبيقك بنفسه ما يُستغنى عنه أولاً
allkeys-lrmتحذف المفاتيح التي لم تُعدَّل منذ أطول وقت، ولو قُرئتجديدة في Redis 8.6، لبيانات تُقرأ كثيراً وتتقادم

وسياسات volatile لا تحذف إلا مفتاحاً له مدة صلاحية، فإن لم يكن في Redis مفتاح كهذا، تصرفت مثل noeviction ورفضت الكتابة.

سقف الذاكرة وسياسة الإخلاء
# في redis.confmaxmemory 512mbmaxmemory-policy allkeys-lru# أو أثناء التشغيل، ثم احفظ التغيير في ملف الإعدادredis-cli --user admin --askpass CONFIG SET maxmemory 512mbredis-cli --user admin --askpass CONFIG REWRITE

والقاعدة العملية: لا تخلط التخزين المؤقت ببيانات لا تحتمل الضياع في نسخة واحدة. شغّل نسخة للتخزين المؤقت بسياسة allkeys-lru، ونسخة للجلسات والطوابير بسياسة noeviction، فلا يحذف الإخلاء جلسة زبون ليفسح لصفحة مخزنة.

07هل يحفظ Redis بياناته على القرص

بيانات Redis في الذاكرة، لكنه يستطيع أن يحفظها على القرص ليستعيدها بعد إعادة التشغيل، بطريقتين:

  • لقطات RDB: يكتب نسخة كاملة من بياناته في ملف واحد مضغوط كل فترة. والإعداد المقترح في redis.conf يحفظ بعد ساعة إن تغيّر مفتاح واحد، وبعد 5 دقائق إن تغيّر 100، وبعد دقيقة إن تغيّر 10,000، فقد تضيع آخر الدقائق إن توقف فجأة. وملفها ممتاز للنسخ الاحتياطي.
  • سجل AOF: يكتب كل أمر يغيّر البيانات في سجل يعيد تنفيذه عند التشغيل. وبالإعداد appendfsync everysec، وهو المقترح، لا تخسر أكثر من ثانية من الكتابات.

ويمكن الجمع بينهما، أو إيقاف الحفظ كله لتخزين مؤقت خالص يُبنى من جديد. اختر بحسب ما تخزنه:

ما تخزنهالحفظ المقترح
صفحات أو استعلامات أو كائنات مخزنة مؤقتاًبلا حفظ، أو RDB لتبدأ ممتلئة بعد إعادة التشغيل
جلسات المستخدمينRDB، أو AOF إن كان خروج الزوار من حساباتهم مزعجاً
طوابير المهامAOF مع RDB، فالمهمة الضائعة بريد لم يُرسل
بيانات لا تحتمل الضياعمكانها قاعدة بياناتك الرئيسية، لا Redis وحده
إعداد الحفظ على القرص في redis.conf
# تخزين مؤقت خالص: لا لقطات ولا سجلsave ""appendonly no# جلسات وطوابير: لقطات، وسجل يُكتب على القرص كل ثانيةsave 3600 1 300 100 60 10000appendonly yesappendfsync everysec

وملف RDB آمن للنسخ أثناء عمل Redis، لأنه يُكتب باسم مؤقت ثم يحل محل القديم دفعة واحدة، فانسخه كل يوم إلى خارج الخادم. ومنذ Redis 8.10 تأخذ أوامر BACKUP نسخة كاملة تشمل آخر الكتابات دون أن تتوقف الكتابة.

08اضبط النظام حول Redis

ثلاثة إعدادات في Linux يوصي بها توثيق Redis، ويكتب Redis في سجله تحذيراً حين يجد ما يخالف بعضها:

  • vm.overcommit_memory = 1: ليحفظ في الخلفية ينسخ Redis نفسه في عملية فرعية. ومع الإعداد الافتراضي قد يرفض Linux النسخ إن لم تكفِ الذاكرة الحرة لنسخة كاملة، فيفشل الحفظ. والقيمة 1 تحل ذلك.
  • Transparent Huge Pages: ميزة في النواة تزيد زمن الاستجابة واستهلاك الذاكرة. يعطّلها Redis الحديث لعمليته وحدها بالإعداد disable-thp، ويوصي توثيقه بتعطيلها للنظام إن ظهر تحذيرها.
  • ذاكرة swap: يوصي التوثيق بأن تكون موجودة، فإن تجاوز Redis الذاكرة بطؤ بدل أن يقتله النظام، فتنتبه وتعالج.
إعدادات Linux التي يحتاجها Redis
# دائماً، ويبقى بعد إعادة تشغيل الخادمecho "vm.overcommit_memory = 1" | sudo tee /etc/sysctl.d/90-redis.confsudo sysctl --system# إن ظهر تحذير THP في السجل (يعود بعد إعادة تشغيل الخادم)echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled# ثم أعد تشغيل Redis وراجع سجلهsudo systemctl restart redis-serversudo tail -n 30 /var/log/redis/redis-server.log

09اربط تطبيقك بـ Redis

تحتاج لغة تطبيقك إلى مكتبة تتحدث إلى Redis. في PHP هي إضافة phpredis، واسمها redis في قائمة الإضافات، فتأكد أنها مفعّلة لنسخة PHP التي يعمل بها موقعك.

WordPress

ثبّت إضافة Redis Object Cache، ثم أضف إعدادات الاتصال إلى ملف wp-config.php، قبل السطر الذي فيه stop editing:

إعداد Redis Object Cache في wp-config.php
define( "WP_REDIS_HOST", "127.0.0.1" );define( "WP_REDIS_PORT", 6379 );// اسم المستخدم وكلمة المرور من إعداد ACLdefine( "WP_REDIS_PASSWORD", [ "app", "APP_PASSWORD" ] );define( "WP_REDIS_DATABASE", 0 );// بادئة تميّز مفاتيح هذا الموقع إن شاركته مواقع أخرى في Redisdefine( "WP_REDIS_PREFIX", "halawiyat-alkuwait:" );

ثم فعّله من صفحة الإضافة في لوحة التحكم، أو بالأمرين wp redis enable وwp redis status من WP-CLI.

Laravel

في ملف .env:

إعداد Redis في ملف .env لتطبيق Laravel
REDIS_CLIENT=phpredisREDIS_HOST=127.0.0.1REDIS_PORT=6379REDIS_USERNAME=appREDIS_PASSWORD=APP_PASSWORD# التخزين المؤقت والجلسات والطوابير كلها على RedisCACHE_STORE=redisSESSION_DRIVER=redisQUEUE_CONNECTION=redis

ثم امسح الإعدادات المخزنة بالأمر php artisan config:clear. ويضع Laravel مفاتيح التخزين المؤقت في القاعدة 1، بعيداً عن الطوابير في القاعدة 0، فلا يمسح الأمر php artisan cache:clear مهامك المنتظرة. ومع مقبس Unix، اجعل REDIS_HOST مسار المقبس وREDIS_PORT صفراً.

Node.js

الاتصال بـ Redis من Node.js بمكتبة node-redis
import { createClient } from "redis";// مثل redis://app:[email protected]:6379/0const redis = createClient({ url: process.env.REDIS_URL });redis.on("error", (err) => console.error("Redis:", err));await redis.connect();await redis.set("visits:today", "0", { EX: 86400 });await redis.incr("visits:today");

10راقب Redis وقِس أثره

أهم رقم في Redis المستعمل للتخزين المؤقت هو نسبة الإصابة: كم مرة وجد التطبيق ما طلبه في Redis من كل مئة محاولة. تحسبها من INFO stats بقسمة keyspace_hits على مجموع keyspace_hits وkeyspace_misses. والأوامر التالية تكفي لمعظم الفحوص:

أوامر مراقبة Redis
redis-cli --user admin --askpass# الذاكرة المستعملة والسقف ونسبة التجزئةINFO memory# الإصابات والإخفاقات، والمفاتيح المحذوفة بالإخلاء والمنتهية صلاحيتهاINFO stats# أبطأ عشرة أوامر (كل ما تجاوز 10 ملّي ثوانٍ افتراضياً)SLOWLOG GET 10# تشخيص زمن الاستجابة والذاكرة بكلام مفهومLATENCY DOCTORMEMORY DOCTOR

ومن الطرفية يبحث redis-cli --bigkeys عن أكبر المفاتيح، ويقيس redis-cli --latency زمن الرد باستمرار. فإن كانت نسبة الإصابة أقل مما تتوقع، فانظر إلى evicted_keys: رقم كبير يعني أن الذاكرة لا تكفي أو أن السياسة لا تناسب طريقة القراءة. وإن كان صغيراً وexpired_keys كبيراً، فمدة الصلاحية أقصر من اللازم.

المشكلةOOM command not allowed when used memory > maxmemory
الحلبلغ Redis سقفه وسياسته noeviction. ارفع السقف، أو اختر allkeys-lru إن كانت النسخة للتخزين المؤقت، وابحث عن المفاتيح الكبيرة بـ --bigkeys.
المشكلةMISCONF Redis is configured to save RDB snapshots…
الحلفشل الحفظ على القرص، فأوقف Redis الكتابة حمايةً لبياناتك. راجع سجله: قرص ممتلئ، أو صلاحيات مجلد الحفظ، أو vm.overcommit_memory.
المشكلةNOAUTH Authentication required أو WRONGPASS
الحلالتطبيق لا يرسل كلمة المرور، أو يرسلها دون اسم المستخدم. راجع إعداد الاتصال في التطبيق.
المشكلةRedis يبطؤ فجأة بين حين وآخر
الحلالأمر KEYS على قاعدة كبيرة يوقف كل شيء حتى ينتهي، فاستعمل SCAN بدلاً منه. وراجع SLOWLOG، وأوقات الحفظ في الخلفية.
المشكلةPermission denied على مقبس Unix
الحلمستخدم خادم الويب ليس في مجموعة redis، أو صلاحيات المقبس في unixsocketperm أضيق من اللازم.

11حدّث Redis وتابع ثغراته

في 3/10/2025 أصلح Redis ثغرة سمّاها مكتشفوها في Wiz «RediShell»، رقمها CVE-2025-49844: خلل في محرك Lua عمره نحو 13 عاماً، قُيّم 10 من 10، يسمح لمن يستطيع تشغيل سكربت Lua بأن يشغّل شيفرة على الخادم. والإصلاح في النسخ 8.2.2 و8.0.4 و7.4.6 و7.2.11 و6.2.20، وأصدر Valkey إصلاحه في اليوم نفسه. ولم تتوقف الإصلاحات بعدها: في 5/2026 سدّت النسخة 8.6.3 خمس ثغرات قد تؤدي إلى تشغيل شيفرة عن بعد، منها CVE-2026-23631 في Lua أيضاً، وتبعتها إصلاحات أمنية أخرى في 7/2026 و8/2026.

أغلب هذه الثغرات يحتاج من المهاجم أن يتصل بـ Redis أولاً، ولهذا يحميك إعداد الشبكة وكلمات المرور في هذا المقال من معظمها. لكنه لا يغني عن التحديث:

  • اعرف نسختك: بالأمر redis-server --version، أو INFO server من داخل redis-cli.
  • حدّث من مصدرك: sudo apt-get update ثم sudo apt-get upgrade على Ubuntu وDebian، أو sudo dnf upgrade على AlmaLinux وRocky، ثم أعد تشغيل الخدمة.
  • ابقَ على فرع مدعوم: أحدث إصدار مستقر اليوم 8.10 من 7/2026، وما زالت فروع 8.2 حتى 8.8 تتلقى الإصلاحات. أما نسخ التوزيعات فتصلها إصلاحاتها من التوزيعة نفسها.

12قائمة مختصرة قبل أن تبدأ

  1. 01قِس أولاً: اعرف أبطأ صفحاتك واستعلاماتك قبل أن تضيف Redis، لتعرف ما الذي ستسرّعه.
  2. 02أغلقه على الخادم: bind على 127.0.0.1 أو مقبس Unix، والوضع المحمي مفعّل.
  3. 03مستخدم وكلمة مرور: عطّل المستخدم الافتراضي، وأعطِ تطبيقك مستخدماً بلا أوامر إدارة.
  4. 04سقف للذاكرة: maxmemory مع هامش، وسياسة إخلاء تناسب ما تخزنه.
  5. 05حفظ بحسب الحاجة: لا حفظ للتخزين المؤقت الخالص، وAOF للطوابير والجلسات.
  6. 06راقب وحدّث: نسبة الإصابة والمفاتيح المحذوفة كل فترة، وكل إصدار أمني فور صدوره.

13Redis مجاناً مع استضافة إليفانتي المشتركة

كل ما سبق تحتاجه حين تدير خادمك بنفسك. أما إن كان موقعك على الاستضافة المشتركة لدى إليفانتي، فـ Redis مضمّن مجاناً في كل خطط استضافة cPanel، نسخةً خاصة بحسابك تديرها من cPanel دون أن تكتب سطر إعداد واحداً:

  • تشغيل بنقرة: تفعّل Redis وتشغّله وتوقفه من cPanel، وترى حالته في لمحة: يعمل، أو متوقف، أو ذاكرته مرتفعة.
  • نسخة معزولة لحسابك: لكل حساب نسخة Redis منفصلة بكلمة مرور خاصة، تبقى مخفية حتى تطلب إظهارها، ويتصل بها موقعك من الخادم نفسه.
  • إعدادات جاهزة بنقرة: لـ WordPress وLaravel وMagento ولجلسات المستخدمين، أو إعداد عام. كل منها يضبط سياسة الذاكرة والخيارات المناسبة لاستخدامه.
  • ضبط متقدم: سقف الذاكرة وسياسة الإخلاء وعدد قواعد البيانات ومهلة الاتصال وعدد الاتصالات والحفظ على القرص، ضمن حدود خطتك.
  • يتعرف على تطبيقك: يفحص مجلد موقعك فيكتشف WordPress، ومعه LiteSpeed Cache، وLaravel وMagento، ويعطيك إعدادات الاتصال بحسابك جاهزة للصق في WordPress وLaravel وMagento وPHP وNode.js وPython وLiteSpeed Cache.
  • درجة صحة وقائمة تحقق: درجة من 100 تلخّص حالة Redis، وقائمة تتأكد أنه مفعّل ويعمل وبكلمة مرور، ومع كل بند إرشاد لإصلاحه.
  • مراقبة لحظة بلحظة: رسوم بيانية للذاكرة وذروتها والاتصالات ونسبة الإصابة وزمن الاستجابة ونشاط الأوامر، مع سجل لآخر 24 ساعة وآخر 7 أيام.
  • نسخ احتياطية واستعادة: تأخذ نسخة من بيانات Redis متى شئت وتستعيدها من cPanel، ويحفظ النظام لقطة من البيانات الحالية قبل أي استعادة.
  • تقرير تشخيص للدعم: تصدره بصيغة JSON وكلمات المرور فيه مخفية، فترفقه بتذكرتك بأمان.

ولأن خادم الويب في استضافتنا LiteSpeed، تجد LiteSpeed Cache وRedis معاً في الخطط الثلاث: الأول يخزن الصفحات كاملة، والثاني يحفظ الكائنات ونتائج الاستعلامات لما لا يُخزَّن من الصفحات. وتذكّر أن تفعّل إضافة redis لنسخة PHP من Select PHP Version في cPanel. وإن كان تطبيقك على CoreVPS، فلك صلاحيات root كاملة، فاضبط Redis كما في هذا المقال. وفريق الدعم الفني معك على مدار الساعة إن احتجت مساعدة في ربط موقعك بـ Redis.

اختبر فهمك للمقال

ثلاثة أسئلة، دقيقة واحدة

⁦0 / 3⁩المجموعة 1

  1. 01لماذا يرد Redis أسرع من قاعدة بيانات مثل MariaDB؟

  2. 02متجرك يعرض صفحة منتج من Redis بمدة صلاحية ساعة، ثم غيّرت السعر في قاعدة البيانات. ماذا يرى الزوار؟

  3. 03نسخة Redis لجلسات المستخدمين وطوابير المهام. أي سياسة إخلاء تناسبها؟

جاهز لتبدأ؟ عزّز مشاريعك اليوم

اختر الاستضافة أو الخادم أو النطاق المناسب لأعمالك، وفريقنا المتخصص متاح على مدار الساعة لضمان نجاح مشاريعك.

نطاق .com سنوياً
$17
استضافة cPanel شهرياً
$2
خوادم CoreVPS شهرياً
$3.50