Redis في مقابل Memcached: اختيار المحرك المناسب
قارن بين Redis (الاستمرارية والنسخ المتماثل والمجموعات المرتبة وpub/sub) وMemcached (البساطة وتعدد مؤشرات الترابط)، واختر بناءً على متطلبات حالة الاستخدام
Redis في مقابل Memcached: اختيار المحرك المناسب درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ما هي Amazon ElastiCache؟
Amazon ElastiCache هي خدمة تخزين مؤقت مُدارة بالكامل داخل الذاكرة، تسهّل نشر مخازن البيانات الشائعة مفتوحة المصدر الموجودة داخل الذاكرة وإدارتها وتوسيع نطاقها في السحابة. وهي تدعم محركين: Redis وMemcached. ومن خلال تقديم البيانات المطلوبة بشكل متكرر من الذاكرة بدلًا من قاعدة البيانات، تستطيع ElastiCache تقليل الحمل على قاعدة البيانات بمقادير كبيرة وخفض زمن استجابة الطلبات من ميلي ثانية إلى ميكروثانية. ويُعد الاختيار بين Redis وMemcached سؤالًا شائعًا في اختبار SAA-C03.
Memcached: البساطة الخالصة
Memcached هو مخزن موزّع للقيم والمفاتيح داخل الذاكرة، يركّز على البساطة وقابلية التوسع الأفقي. ومن خصائصه الرئيسية: تعدد الخيوط (يمكنه استخدام جميع أنوية وحدة المعالجة المركزية على عقدة واحدة)، وتخزين بسيط للقيم والمفاتيح (السلاسل النصية فقط، من دون هياكل بيانات معقدة)، وعدم وجود استمرارية (تُفقد البيانات عند إعادة تشغيل العقدة)، وعدم وجود نسخ متماثل (لا توجد عقدة احتياطية أو نسخ متماثلة)، والتقسيم الأفقي باستخدام التجزئة المتسقة من جانب العميل. ويُعد Memcached الخيار المناسب عندما تحتاجون إلى ذاكرة تخزين مؤقت بسيطة واسعة النطاق، ولا تحتاجون إلى الاستمرارية أو أنواع البيانات المعقدة أو التوافر العالي.
# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
--cache-cluster-id my-memcached \
--engine memcached \
--cache-node-type cache.r7g.large \
--num-cache-nodes 3 \
--cache-subnet-group-name my-subnet-group
# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211Redis: مخزن غني بالميزات داخل الذاكرة
Redis (Remote Dictionary Server) هو مخزن لهياكل البيانات داخل الذاكرة، غني بالميزات ويعمل بخيط واحد (لكل مثيل)، ويدعم السلاسل النصية والتجزئات والقوائم والمجموعات والمجموعات المرتبة والصور النقطية وHyperLogLogs والتدفقات والفهارس الجغرافية المكانية. ومن أهم مزاياه مقارنةً بـ Memcached: الاستمرارية الاختيارية (AOF ولقطات RDB)، والنسخ المتماثل (نسخ متماثلة للقراءة والتجاوز التلقائي للفشل)، والمراسلة عبر pub/sub، والبرمجة النصية بلغة Lua، والمعاملات (MULTI/EXEC)، ووضع المجموعة للتقسيم الأفقي. ويُعد Redis الخيار المناسب لمعظم سيناريوهات التخزين المؤقت الواقعية.
# Redis data structure examples
# String
# SET user:1:name 'Alice'
# GET user:1:name
# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42
# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES
# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notificationsاستمرارية Redis: AOF وRDB
يدعم Redis آليتين للاستمرارية: RDB (Redis Database) — لقطات دورية لنقطة زمنية معينة تُحفظ على القرص ضمن فواصل زمنية قابلة للتهيئة (تتيح إعادة التشغيل بسرعة، لكن قد تؤدي إلى فقدان البيانات التي أُضيفت بين اللقطات). وAOF (Append-Only File) — يسجل كل عملية كتابة؛ وعند إعادة التشغيل، يعيد Redis تشغيل السجل لإعادة بناء الحالة (يوفر المتانة على حساب زيادة حجم الملفات وإبطاء عمليات إعادة التشغيل). في ElastiCache، يمكنكم تمكين AOF للحفاظ على البيانات عبر عمليات إعادة تشغيل العقد. ويُعد ذلك مهمًا للغاية عندما تُستخدم ElastiCache ليس كذاكرة تخزين مؤقت فحسب، بل أيضًا كمخزن بيانات أساسي، مثل تخزين بيانات الجلسات.
# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
--replication-group-id my-redis \
--replication-group-description 'Redis with persistence' \
--cache-node-type cache.r7g.large \
--engine redis \
--num-cache-clusters 2 \
--cache-parameter-group-name default.redis7 \
--snapshot-retention-limit 5
# Note: Enable AOF via parameter group: appendonly=yesالنسخ المتماثل في Redis والتجاوز التلقائي للفشل
يدعم Redis مجموعات النسخ المتماثل التي تتضمن عقدة أساسية واحدة تتولى جميع عمليات الكتابة، وما يصل إلى 5 نسخ متماثلة للقراءة تتولى عمليات القراءة. عند تمكين Multi-AZ والتجاوز التلقائي للفشل، ترفع ElastiCache تلقائيًا إحدى النسخ المتماثلة للقراءة لتصبح العقدة الأساسية عند تعطل العقدة الأساسية — ويكتمل التجاوز عادةً خلال أقل من 60 ثانية. ويوفر ذلك للتطبيقات التي تعتمد على Redis توافرًا عاليًا لا يستطيع Memcached توفيره (إذ لا يدعم Memcached النسخ المتماثل). وبالنسبة إلى تطبيقات الإنتاج التي تتطلب تخزينًا مؤقتًا عالي التوافر، استخدموا دائمًا Redis مع التجاوز التلقائي للفشل.
# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
--replication-group-id prod-redis \
--description 'Production Redis with HA' \
--cache-node-type cache.r7g.xlarge \
--engine redis \
--multi-az-enabled \
--automatic-failover-enabled \
--num-cache-clusters 3 \
--cache-subnet-group-name multi-az-subnet-group
# 1 primary + 2 replicas across 3 AZsالمجموعات المرتبة في Redis للوحات المتصدرين
تُعد المجموعات المرتبة إحدى أقوى هياكل البيانات في Redis. إذ يرتبط بكل عنصر تقييم عشري، وتبقى العناصر مرتبة دائمًا. ويجعل ذلك المجموعات المرتبة مثالية لـلوحات المتصدرين (الترتيب حسب التقييم)، وقوائم انتظار الأولويات (معالجة المهام ذات الأولوية الأعلى أولًا)، وتحديد معدل الطلبات (نافذة منزلقة تستخدم الطوابع الزمنية كتقييمات). وتبلغ كفاءة العمليات ZADD وZRANGE وZREVRANGE وZRANK وZRANGEBYSCORE جميعًا O(log n)، ما يجعلها فعالة للغاية حتى مع ملايين الإدخالات.
# Leaderboard operations using Redis sorted sets
# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800 'player:bob'
# ZADD game:leaderboard 11200 'player:carol'
# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800
# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)pub/sub في Redis للمراسلة
يتيح pub/sub في Redis للناشرين بث الرسائل إلى القنوات من دون معرفة المشتركين فيها. ويتلقى المشتركون جميع الرسائل المنشورة في القنوات التي اشتركوا فيها، في الوقت الفعلي. ورسائل pub/sub لا تُحفظ — فإذا كان المشترك غير متصل، فلن تصله الرسالة. وللحصول على مراسلة مستمرة مع ضمان التسليم، استخدموا Redis Streams (وهو هيكل بيانات أكثر متانة أُضيف في Redis 5) أو خدمة مراسلة مخصصة مثل SQS أو SNS. وفي اختبار SAA-C03، يُعد pub/sub في Redis خيارًا للإشعارات الخفيفة في الوقت الفعلي بين الخدمات.
# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'
# Subscriber side (listens for messages)
# SUBSCRIBE notifications
# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered
# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgementMemcached مقابل Redis: جدول اتخاذ القرار
استخدموا الإطار التالي للاختيار في اختبار SAA-C03: اختاروا Memcached عندما تحتاجون إلى: ذاكرة تخزين مؤقت بسيطة من دون متطلبات للتوافر العالي، وأداء متعدد الخيوط، وتوسيع أفقي بإضافة العقد (ذاكرة تخزين مؤقت خالصة). واختاروا Redis عندما تحتاجون إلى: الاستمرارية (كمخزن للجلسات)، والنسخ المتماثل والتجاوز للفشل (للتوافر العالي)، وأنواع البيانات المعقدة (مثل المجموعات المرتبة للوحات المتصدرين، والمجموعات، والقوائم)، وpub/sub، ومعاملات Lua، ووضع المجموعة للتوسيع الأفقي متعدد الأجزاء. وإذا ذكر سؤال الاختبار أي ميزة تتجاوز التخزين المؤقت البسيط للقيم والمفاتيح، فغالبًا ما تكون الإجابة Redis.
أنواع عُقد التخزين المؤقت وعائلاتها
توفر ElastiCache عدة عائلات من أنواع العقد: r7g (Graviton 3، محسّنة للذاكرة — أفضل نسبة بين السعر والأداء، ويُوصى بها لمعظم حالات التخزين المؤقت)، وm7g (متوازنة بين الحوسبة والذاكرة)، وt4g (قابلة للزيادة المؤقتة، ومنخفضة التكلفة للتطوير والاختبار). وتتراوح أحجام العقد من cache.t4g.micro (500 ميجابايت) إلى cache.r7g.16xlarge (425 جيجابايت). بالنسبة إلى الإنتاج، اختاروا حجم عقدة يُبقي مجموعة البيانات في الذاكرة مع هامش احتياطي يتراوح بين 20 و25%. ويؤدي نفاد الذاكرة إلى عمليات إخلاء في Memcached أو أخطاء نفاد الذاكرة (OOM) في Redis.
# Get available cache node types
aws elasticache describe-cache-engine-versions \
--engine redis \
--query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'
# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
--cache-parameter-group-family redis7
# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is fullأمان ElastiCache
تُنشر ElastiCache داخل VPC الخاص بكم، مع مجموعات أمان تتحكم في الوصول — ولا يتوفر وصول من الإنترنت العام افتراضيًا. بالنسبة إلى Redis، فعّلوا رموز AUTH (كلمة مرور يجب على العملاء تقديمها) والتشفير أثناء النقل (TLS) للاتصالات، بالإضافة إلى التشفير أثناء التخزين باستخدام KMS. أما Memcached، فلا يتوفر له سوى TLS أثناء النقل (ولا يدعم التشفير أثناء التخزين أو AUTH). وعند الانتقال من Redis غير المشفّر إلى Redis المشفّر، لا تتوفر إمكانية الانتقال في مكانه — بل يجب إنشاء مجموعة مشفّرة جديدة وتهيئتها بالبيانات.
# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
--replication-group-id secure-redis \
--description 'Encrypted Redis' \
--cache-node-type cache.r7g.large \
--engine redis \
--transit-encryption-enabled \
--at-rest-encryption-enabled \
--auth-token 'MySecretPassword123!'
# Store the AUTH token in Secrets Manager, not in your app codeسياسات الإخلاء
عندما تمتلئ ذاكرة التخزين المؤقت في Redis أو Memcached، تحدد سياسة الإخلاء المفاتيح التي ستُزال لإفساح المجال. ومن سياسات الإخلاء الشائعة في Redis: noeviction (يعيد خطأ OOM — مناسب عندما تكون ذاكرة التخزين المؤقت مخزن البيانات الأساسي)، وallkeys-lru (يُخلي المفاتيح الأقل استخدامًا مؤخرًا من بين جميع المفاتيح — مناسب لذاكرة التخزين المؤقت العامة)، وvolatile-lru (يطبق LRU على المفاتيح التي تم تعيين TTL لها — ويحافظ على المفاتيح التي لا تنتهي صلاحيتها)، وallkeys-random (إخلاء عشوائي)، وallkeys-lfu (الأقل استخدامًا تكرارًا). وبالنسبة إلى حالات التخزين المؤقت المعتادة، يُوصى باستخدام allkeys-lru أو allkeys-lfu.
# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
--cache-parameter-group-name redis7-lru \
--cache-parameter-group-family redis7 \
--description 'LRU eviction policy'
aws elasticache modify-cache-parameter-group \
--cache-parameter-group-name redis7-lru \
--parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru
# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
--replication-group-id prod-redis \
--cache-parameter-group-name redis7-lruاختبار سريع
اختبروا مدى فهمكم لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن Memcached بسيط ومتعدد الخيوط ولا يوفر توافرًا عاليًا — وهو الأنسب للتوسيع الأفقي الخالص لذاكرات التخزين المؤقت البسيطة، وأن Redis يدعم هياكل البيانات المعقدة والاستمرارية وpub/sub والتجاوز للفشل عبر Multi-AZ — وهو الأنسب لمعظم سيناريوهات التخزين المؤقت في بيئات الإنتاج، وأن المجموعات المرتبة تجعل Redis الخيار الطبيعي للوحات المتصدرين وقوائم انتظار الأولويات. بعد ذلك، سنستكشف مجموعات النسخ المتماثل في Redis ووضع المجموعة للتقسيم الأفقي.
الأسئلة الشائعة
هل درس «Redis في مقابل Memcached: اختيار المحرك المناسب» مجاني؟
نعم — نص درس «Redis في مقابل Memcached: اختيار المحرك المناسب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ماذا ستتعلم في «Redis في مقابل Memcached: اختيار المحرك المناسب»؟
قارن بين Redis (الاستمرارية والنسخ المتماثل والمجموعات المرتبة وpub/sub) وMemcached (البساطة وتعدد مؤشرات الترابط)، واختر بناءً على متطلبات حالة الاستخدام تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟
لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Redis في مقابل Memcached: اختيار المحرك المناسب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟
نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Redis في مقابل Memcached: اختيار المحرك المناسب
- مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود
- استراتيجيات التخزين المؤقت: التحميل الكسول والكتابة الفورية
- تخزين الجلسات وأنماط لوحات الصدارة