يحتفظ Redis بالبيانات في الذاكرة، ما يجعل القراءات أسرع بكثير من القرص. نستخدمه للتخزين المؤقت والجلسات وتحديد المعدل وطوابير المهام — ولا نستخدمه أبدًا كمقر دائم لبيانات تهم.
ما هي Redis؟
Redis مخزن مفتاح-قيمة يعيش في الذاكرة. وذلك القرار التصميمي الوحيد هو مصدر سرعته ومصدر قيده أيضًا: فالذاكرة سريعة ومحدودة، وتُفقد عند إعادة تشغيل العملية ما لم يُضبط الحفظ.
ويُفهم أفضل ما يُفهم كمكان لوضع أشياء مكلفة الحساب ورخيصة الفقد. صفحة مخزنة، أو جلسة، أو عداد تحديد معدل، أو مهمة في طابور.
متى نختار Redis
حين تكون الصفحة مكلفة البناء ونادرة التغيّر. فتخزين النتيجة المعروضة يحوّل صفحة تمسّ تسعة جداول إلى قراءة ذاكرة واحدة، وهذا معظم ما يجعل موقعًا مزدحمًا يبدو سريعًا.
وللجلسات في موقع يعمل على أكثر من خادم، فيبقى الزائر مسجّل الدخول أيًا كان الخادم المجيب.
ولطوابير المهام، حيث يُسلَّم العمل الذي كان سيحجب طلبًا ويُعالَج في الخلفية.
ولتحديد المعدل، الذي يحتاج عدادًا مشتركًا عبر كل خادم ويُحدَّث آلاف المرات في الثانية. وهذا حمل تتعامل معه قاعدة علائقية بسوء ويتعامل معه Redis كحالته الافتراضية.
متى لا نستخدم Redis
في موقع صغير واحد على استضافة مشتركة. فمشغّل التخزين المؤقت في قاعدة البيانات كافٍ هناك، وإضافة خدمة تُشغَّل لموقع بحركة متواضعة تعقيد بلا عائد. وهذا الموقع يُطلق بمشغّل قاعدة البيانات لهذا السبب بالضبط.
ولا كمقر وحيد لبيانات تهم أبدًا. فـ Redis ذاكرة مؤقتة؛ وإن كان فقدها يفقد شيئًا، فمكانه قاعدة بيانات.
ما الذي نبنيه بـ Redis
تخزين مؤقت للصفحات والاستعلامات
صفحات معروضة ونتائج استعلامات مكلفة تُحفظ في الذاكرة بانتهاء صلاحية معقول، وتُبطَل حين يحفظ محرر فلا يرى أحد محتوى قديمًا.
طوابير للعمل البطيء
معالجة الصور والبريد وتوليد التقارير واستدعاءات النماذج تُنقل خارج الطلب فلا تنتظرها صفحة أبدًا. وهذه أنجع طريقة لإبقاء موقع مستجيبًا مع تراكم الميزات.
تحديد المعدل والحماية من إساءة الاستخدام
محاولات تسجيل الدخول وإرسال النماذج واستدعاءات الواجهات تُعدّ لكل مستخدم ولكل عنوان، فتُخنق محاولة تخمين قبل وصولها إلى قاعدة البيانات.
تخزين الجلسات عبر الخوادم
فيبقى الزائر مسجّل الدخول أيًا كان الخادم الذي يجيب طلبه التالي. وهذا ما ينكسر بهدوء حين يُوسَّع موقع إلى خادمين دون تخطيط لذلك.
إبطال التخزين المؤقت مربوط بلوحة التحكم
يحفظ محرر فتُمسح الصفحات المتأثرة فورًا. فانتهاء الصلاحية بالوقت وحده يعني أن أحدهم سيرى سعرًا قديمًا في النهاية، وهذا أسوأ من صفحة بطيئة.
لوحات صدارة وعدادات حية
المجموعات المرتبة تتحدث وتُرتَّب في زمن ثابت، فيبقى عدّ حي أو ترتيب دقيقًا تحت الحمل دون إرهاق قاعدة البيانات. مفيد حيثما وجب أن يكون رقم صحيحًا وفوريًا في آن.
كيف نطلق مشاريع Redis
مع ضبط حد للذاكرة وسياسة إخلاء. فنسخة Redis بلا حد ستستهلك كل المتاح ثم تأخذ الخادم معها.
ومع حمل كل قيمة مخزنة انتهاء صلاحية، وربط الإبطال بحفظ لوحة التحكم فيظهر التعديل فورًا لا بعد ساعة.
ومع ضبط الحفظ بحسب ماهية البيانات. فالذاكرة المؤقتة يمكن فقدها عند إعادة التشغيل؛ وطابور مهام قُبلت ولم تُنفَّذ لا يمكن، وإلا اختفى طلب عميل بهدوء. وهذان إعدادان مختلفان ومعاملتهما بالمثل خطأ حقيقي.
ما تكلّفك Redis
الذاكرة أغلى من القرص، فذاكرة مؤقتة كبيرة بند استضافة حقيقي.
وإبطال التخزين المؤقت صعب فعلًا — ونمط الفشل عميل يرى سعر الأمس، وهذا أسوأ من صفحة بطيئة. لذا نُبطل عند الكتابة لا اعتمادًا على انتهاء الصلاحية وحده لأي شيء يهم.
وهو أيضًا خدمة إضافية تُراقَب وتُؤمَّن. فنسخة Redis مكشوفة بلا كلمة مرور طريقة معروفة للاختراق، ويحدث ذلك لأن الإعداد الافتراضي مريح لا آمن.
أسئلة تُطرح علينا عن Redis
ليس لموقع تعريفي أو محتوى معتاد — فتخزين قاعدة البيانات يكفي. تحتاجه حين تكون الحركة عالية بما يجعل حمل قاعدة البيانات هو العنق، أو حين تشغّل أكثر من خادم، أو حين تكون المهام الخلفية جزءًا كبيرًا من النظام.
تكون الذاكرة المؤقتة فارغة وتُعاد بناؤها من قاعدة البيانات مع طلب الصفحات. فتوجد فترة قصيرة من استجابات أبطأ ولا يُفقد شيء — ولهذا بالضبط يجب ألا يعيش أي شيء يهم في Redis وحده.
أقل مما يتوقع الناس لموقع معتاد — فالصفحات المخزنة والجلسات صغيرة. ونضع حدًا وسياسة إخلاء فيتخلص من أقل المدخلات استخدامًا بدل النمو حتى يُسقط الخادم معه.
ليس إن كان الإبطال مربوطًا بالكتابات. فحين يحفظ محرر أو يتغير سعر، تُمسح المدخلات المتأثرة فورًا لا انتظارًا لانتهاء صلاحية. والاعتماد على انتهاء الصلاحية بالوقت وحده هو كيف ينتهي عميل برؤية سعر الأمس، وهذا أسوأ من صفحة بطيئة.
نعم، عادةً بلا تغييرات كود في تطبيق Laravel أو Node — فهو تبديل مشغّل وخدمة تُشغَّل. لكننا سنقيس أولًا: ففي موقع لا تكون فيه قاعدة البيانات تحت ضغط فعلًا، إضافة Redis خدمة تُصان مقابل لا شيء قابل للقياس.
لا رقم واحد — فالأمر يعتمد على كلفة بناء صفحاتك. فموقع باستعلامات ثقيلة يستفيد عند بضعة آلاف زيارة يوميًا؛ وموقع بسيط قد لا يحتاجه أبدًا. ونقيس حمل قاعدة البيانات أولًا ونضيف Redis حين يقول القياس ذلك، لا لأن البنية تبدو أكثر جدية به.