Loading...

المنصّات · قراءة 8 دقائق

ما هو Redis؟ سرّع تطبيقك بكاش يعمل في الذاكرة

Redis مخزن بيانات يعمل في الذاكرة: يحتفظ بالبيانات في RAM بدل القرص، فتستغرق القراءة والكتابة ميكروثوانيَ بدل ميلي الثواني. تضعه التطبيقات أمام قاعدة بياناتها ككاش، وتستخدمه لحفظ الجلسات، وتعتمد عليه للعدّادات والطوابير. وعند استخدامه جيدًا يزيل أكثر اختناقات الخلفية شيوعًا على الإطلاق — استعلام قاعدة البيانات المكلف نفسه وهو يتكرر مرة بعد مرة. يشرح هذا الدليل ما يفعله Redis حقًا، والأنماط التي تجعله مفيدًا، والحالات التي لن يساعد فيها، وكيف تُنزل النسخة المُدارة العبء التشغيلي عن كاهلك.

Updated

ما هو Redis؟ سرّع تطبيقك بكاش يعمل في الذاكرة

ما هو Redis فعليًا

Redis مخزن مفتاح-قيمة يعيش في الذاكرة. تعطيه مفتاحًا ("user:1042:profile") وقيمة، فيعيد إليك القيمة عند الطلب — عادةً في أقل من ميلي ثانية بكثير، لأن مسار القراءة لا يلمس القرص إطلاقًا. وفوق السلاسل النصية البسيطة يقدّم بنى بيانات عملية: hashes للكائنات، وقوائم ومجموعات مرتّبة للخلاصات ولوائح المتصدرين، ومجموعات لفحوص العضوية، وعدّادات بزيادات ذرّية.

هذا المزيج — سرعة RAM مع بنى بيانات حقيقية — هو سبب ظهوره في كل بنية ويب جادة تقريبًا. هو لا ينافس قاعدة بياناتك في الديمومة وقابلية الاستعلام؛ بل ينافسها في *سرعة الإجابة عن السؤال نفسه مرارًا وتكرارًا*، ويكسب هذه المنافسة بفارق مرتبتين أو ثلاث مراتب من حيث الحجم.

المشكلة التي يحلّها: العمل المكلف المتكرر

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

نمط cache-aside يعالج هذا بالضبط: افحص Redis أولًا؛ عند الإصابة أعد النسخة المخزّنة؛ وعند الإخفاق شغّل الاستعلام الحقيقي وخزّن النتيجة مع مدة صلاحية (TTL) ثم أعدها. صفحة كانت تحتاج خمسة عشر استعلامًا تحتاج الآن خمس عشرة قراءة من الذاكرة في المسار الدافئ. وتنتقل قاعدة البيانات من تلقّي كل طلب إلى تلقّي طلب واحد لكل نافذة TTL — وهذا أيضًا سبب نجاة المواقع من موجات الزيارات مع Redis بينما كانت ستنهار من دونه.

الجلسات هي الوظيفة الكلاسيكية الثانية. حفظ جلسات تسجيل الدخول في Redis بدل القرص المحلي يعني أن أي نسخة من تطبيقك تستطيع خدمة أي مستخدم — وهذا ما يجعل التوسّع الأفقي ممكنًا أصلًا.

أين لن يساعدك Redis

خط حدود صادق يوفّر عليك أسابيع. Redis لا يجعل الاستعلام البطيء سريعًا في المرة الأولى — إنما يجعل التنفيذ *الثاني* رخيصًا، فالفهرس الغائب في قاعدة البيانات يبقى فهرسًا غائبًا. وهو لا يصلح مسار شبكة بطيئًا إلى الأصل ولا صورًا ثقيلة؛ فتلك مشكلات توصيل تُحل عند الحافة، لا في RAM. وهو ليس سجلًا دائمًا موثوقًا: الذاكرة محدودة والإخلاء جزء من التصميم، فكل ما لا تحتمل خسارته مكانه قاعدة البيانات، ويحمل Redis نسخة قابلة للتضحية.

التكلفة الحقيقية للتخزين المؤقت هي الإبطال: سعر قديم أو فحص صلاحيات متجاوز خطأٌ يراه مستخدموك. أبقِ TTL قصيرة حيث تهم الصحة، واحذف المفاتيح صراحةً عند تغيّر البيانات الأصلية، وقاوم تخزين ما يتغير مع كل طلب — فكاش بمعدل إصابة قريب من الصفر عبء خالص.

Redis المُدار: طريق الإضافة

تشغيل Redis بنفسك ليس صعبًا في اليوم الأول — بل في اليوم المئتين: حدود الذاكرة، وإعادات التشغيل، وترقيات الإصدارات، وضمان إعادة اتصال التطبيق. النسخة المُدارة تطوي كل ذلك داخل المنصة.

على منصة الحاويات في cdn.com.tr، Redis إضافة تُلحقها بتطبيق. تفعيلها يجهّز النسخة ويحقن الاتصال في بيئة تطبيقك تلقائيًا — REDIS_HOST وREDIS_PORT وREDIS_DB مع REDIS_URL جاهز للاستخدام — فتلتقطه أطر مثل Laravel وDjango وWordPress بالإعداد لا بالكود. وتستخدم منصة WordPress الإضافة نفسها ككاش كائنات، وهي واحدة من أعلى التغييرات المفردة أثرًا لموقع WordPress مزدحم. وعند تعطيل الإضافة تُنظَّف المتغيرات معها.

فعّل Redis المُدار على تطبيق عبر cdnctl

# attach a managed Redis instance to your app
cdnctl container addons enable-redis --account <uuid> --app <app_uuid> --env-prefix REDIS

# see what is attached
cdnctl container addons list --account <uuid> --app <app_uuid>

# remove it again
cdnctl container addons disable-redis --account <uuid> --app <app_uuid>

Redis وCDN: طبقتا كاش لوظيفتين مختلفتين

ما هو Redis؟ سرّع تطبيقك بكاش يعمل في الذاكرة — Redis وCDN: طبقتا كاش لوظيفتين مختلفتين
المنصّات المُدارة وحاويات container apps على cdn.com.tr.

يستحق الأمر دقةً في العلاقة بين الكاش العامل في الذاكرة وCDN، فكلاهما "تخزين مؤقت" وليسا قابلين للتبادل. الـ CDN يخزّن *الاستجابات* — HTML الجاهز والصور والملفات — قريبًا من الزائر، فلا يصل كثير من الطلبات إلى تطبيقك أصلًا. أما Redis فيخزّن *البيانات داخل* التطبيق، فتصبح الطلبات التي تصل فعلًا رخيصة الخدمة.

وهما يتراكبان: تمتص الحافة الأغلبية القابلة للتخزين من الحركة، ويجعل Redis الباقي المخصّص غير القابل للتخزين سريعًا. البنية التي تجمعهما تقدّم عادةً الصفحات المجهولة من الحافة في عشرات الميلي ثواني، وصفحات المسجّلين من خلفية دافئة بـ Redis — وهذه هي البنية وراء معظم المواقع التي تبدو فورية تحت الحمل.

أسئلة شائعة

هل Redis قاعدة بيانات؟

يستطيع الكتابة إلى القرص، لكن هذه ليست الوظيفة التي ينبغي أن توظّفه لها. عامل Redis كنسخة سريعة قابلة للتضحية من بيانات يعيش مصدر حقيقتها في قاعدة بيانات حقيقية. إن كان فقدان البيانات سيؤلمك، فلا يصح أن تكون في Redis وحده.

ما الذي أخزّنه في الكاش أولًا؟

سجل الاستعلامات يجيب: الاستعلامات المكلفة الأكثر تكرارًا التي نادرًا ما تتغير نتائجها — قوائم المنتجات، والقوائم، والإعدادات، والمقاطع المعروضة. خزّنها بـ TTL معقولة وستحصد عادةً معظم المكسب في ظهيرة واحدة.

كم من الذاكرة يحتاج كاش Redis؟

أقل مما يفترض معظم الناس — نتائج الاستعلامات المخزّنة والجلسات صغيرة. ابدأ متواضعًا، وراقب معدل الإصابة والإخلاءات، ولا توسّع إلا عند ظهور إخلاءات لمفاتيح ما زالت مفيدة. معدل إصابة مرتفع على نسخة صغيرة يتفوّق على نسخة ضخمة خاملة.

هل يستفيد WordPress من Redis؟

بوضوح. يعيد WordPress قراءة الخيارات والكائنات من MySQL باستمرار؛ وكاش كائنات Redis يحوّلها إلى قراءات من الذاكرة. وعلى منصة WordPress المُدارة تعمل إضافة Redis نفسها ككاش الكائنات، مع كاش الحافة في المقدمة.