استمرارية Redis
Redis تخزّن البيانات في الذاكرة. الاستمرارية تحفظ تلك البيانات على القرص. يغطي هذا الدرس طرق الاستمرارية RDB و AOF.
لماذا الاستمرارية؟
Redis هي قاعدة بيانات في الذاكرة:
- المشكلة: إعادة تشغيل الخادم أو تعطله يؤدي إلى فقدان بيانات الذاكرة
- الحل: الاستمرارية تحفظ بيانات الذاكرة على القرص للاسترداد بعد إعادة التشغيل
بيانات الذاكرة → استمرارية → ملف القرص
ملف القرص → استرداد → بيانات الذاكرة
يوفر Redis طريقتين للاستمرارية:
- RDB: لقطة — تحفظ البيانات في نقطة زمنية
- AOF: سجل — يسجل كل عملية كتابة
استمرارية RDB
ما هو RDB؟
RDB (Redis Database) يحفظ البيانات في نقطة زمنية محددة كملف لقطة ثنائي.
الميزات:
- يحفظ البيانات الكاملة في نقطة زمنية
- ملف مضغوط، مناسب للنسخ الاحتياطي والنقل
- سرعة استرداد سريعة
- قد يفقد البيانات بعد آخر لقطة
إعدادات RDB
التكوين في redis.conf:
# شروط تشغيل اللقطة
# save <seconds> <changes>
save 900 1 # تغيير واحد على الأقل في 900 ثانية → تشغيل لقطة
save 300 10 # 10 تغييرات على الأقل في 300 ثانية → تشغيل لقطة
save 60 10000 # 10000 تغيير على الأقل في 60 ثانية → تشغيل لقطة
# تعطيل RDB (علّق save أو عيّنها فارغة)
# save ""
# اسم ملف RDB
dbfilename dump.rdb
# دليل تخزين ملف RDB
dir /var/lib/redis
# ضغط RDB (يُوصى بإبقائه مفعّلاً)
rdbcompression yes
# مجموع اختباري RDB (يُوصى بإبقائه مفعّلاً)
rdbchecksum yes
تشغيل RDB يدويًا
# SAVE: لقطة محظورة (استخدم بحذر في الإنتاج)
SAVE
OK # اكتملت اللقطة، تم حظر Redis خلال هذا الوقت
# BGSAVE: لقطة خلفية (موصى به)
BGSAVE
Background saving started # يُرجع فورًا، يعمل في الخلفية
موقع ملف RDB
# الموقع الافتراضي
/var/lib/redis/dump.rdb
# أو الدليل المحدد في الإعدادات
dir /data/redis
dbfilename dump.rdb
استرداد RDB
Redis يقوم تلقائيًا بتحميل ملف RDB عند بدء التشغيل:
# 1. ضع ملف RDB في الدليل المكون
cp dump.rdb /var/lib/redis/
# 2. ابدأ Redis
redis-server
# Redis يقوم تلقائيًا بتحميل dump.rdb لاسترداد البيانات
إيجابيات وسلبيات RDB
الإيجابيات:
- ملف مضغوط، مناسب للنسخ الاحتياطي
- سرعة استرداد سريعة
- تأثير ضئيل على الأداء (BGSAVE في الخلفية)
السلبيات:
- قد يفقد البيانات بعد آخر لقطة
- فقدان البيانات ضمن فترات اللقطة
- لقطات البيانات الكبيرة تستغرق وقتًا أطول
استمرارية AOF
ما هو AOF؟
AOF (Append Only File) يسجل كل أمر كتابة. عند الاسترداد، يعيد Redis تنفيذ تلك الأوامر.
الميزات:
- يسجل كل عملية كتابة، بيانات أكثر أمانًا
- ملف قابل للقراءة البشرية، سهل التحليل والإصلاح
- احتمال تضخم الملف (يحتاج إعادة كتابة)
- سرعة استرداد أبطأ
إعدادات AOF
# تمكين AOF
appendonly yes
# اسم ملف AOF
appendfilename "appendonly.aof"
# استراتيجية مزامنة AOF
appendfsync everysec
# تعطيل fsync أثناء إعادة كتابة AOF
no-appendfsync-on-rewrite no
# حجم ملف AOF الذي يشغل إعادة الكتابة
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
استراتيجيات مزامنة AOF
| الاستراتيجية | الوصف | الأداء | الأمان |
|---|---|---|---|
| always | مزامنة عند كل كتابة | الأبطأ | الأكثر أمانًا |
| everysec | مزامنة مرة كل ثانية | متوسط | آمن بشكل معقول (فقدان 1 ثانية كحد أقصى) |
| no | ترك للنظام التشغيل | الأسرع | الأقل أمانًا |
appendfsync everysec — يوازن بين الأداء والأمان.
إعادة كتابة AOF
ملف AOF ينمو باستمرار. إعادة الكتابة تضغطه:
# تشغيل إعادة كتابة AOF يدويًا
BGREWRITEAOF
Background append only file rewriting started
مبدأ إعادة الكتابة:
- قراءة البيانات الحالية في الذاكرة
- إنشاء الحد الأدنى من الأوامر لاستعادة تلك البيانات
- استبدال ملف AOF القديم
شروط تشغيل إعادة الكتابة:
# حجم ملف AOF نما بنسبة 100% منذ آخر إعادة كتابة
auto-aof-rewrite-percentage 100
# يجب أن يكون ملف AOF على الأقل 64MB لتشغيل إعادة الكتابة
auto-aof-rewrite-min-size 64mb
استرداد AOF
Redis يقوم تلقائيًا بتحميل ملف AOF عند بدء التشغيل:
# 1. ضع ملف AOF في الدليل المكون
cp appendonly.aof /var/lib/redis/
# 2. ابدأ Redis
redis-server
# Redis يقوم تلقائيًا بتحميل appendonly.aof لاسترداد البيانات
إصلاح ملف AOF
# التحقق من ملف AOF
redis-check-aof appendonly.aof
# إصلاح ملف AOF
redis-check-aof --fix appendonly.aof
إيجابيات وسلبيات AOF
الإيجابيات:
- بيانات أكثر أمانًا، فقدان 1 ثانية كحد أقصى
- ملف قابل للقراءة البشرية، سهل التحليل
- يدعم إصلاح الملفات التالفة
السلبيات:
- حجم ملف أكبر
- سرعة استرداد أبطأ
- بعض التأثير على الأداء
مقارنة RDB مع AOF
| الجانب | RDB | AOF |
|---|---|---|
| حجم الملف | صغير (ثنائي مضغوط) | كبير (أوامر نصية) |
| سرعة الاسترداد | سريعة | بطيئة |
| أمان البيانات | قد يفقد دقائق من البيانات | فقدان 1 ثانية كحد أقصى |
| تأثير على الأداء | منخفض (لقطة خلفية) | متوسط (fsync متكرر) |
| قابلية قراءة الملف | غير قابل للقراءة | قابل للقراءة |
| حالة الاستخدام | نسخ احتياطي، تكرار | متطلبات أمان بيانات عالية |
الاستمرارية الهجينة
يدعم Redis 4.0+ الاستمرارية الهجينة، التي تجمع فوائد RDB و AOF.
تكوين الاستمرارية الهجينة
# تمكين AOF
appendonly yes
# تمكين الاستمرارية الهجينة
aof-use-rdb-preamble yes
مبدأ الاستمرارية الهجينة
أثناء إعادة كتابة AOF:
- اكتب البيانات الحالية بتنسيق RDB أولاً (سريع، مضغوط)
- ثم ألحق عمليات الكتابة الجديدة بتنسيق AOF
هيكل ملف AOF:
[بيانات لقطة بتنسيق RDB] + [أوامر إضافية بتنسيق AOF]
مزايا الاستمرارية الهجينة
- استرداد سريع (جزء RDB)
- بيانات آمنة (جزء AOF)
- حجم ملف معتدل
أفضل ممارسات الاستمرارية
السيناريو 1: تخزين مؤقت فقط
# التخزين المؤقت قد لا يحتاج استمرارية، أو RDB فقط
save 900 1
appendonly no
السيناريو 2: تخزين بيانات
# تخزين البيانات يستخدم AOF أو الاستمرارية الهجينة
save 900 1
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
السيناريو 3: توفر عالٍ
# تمكين كل من RDB و AOF
save 900 1
save 300 10
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
استراتيجية النسخ الاحتياطي
# نسخ احتياطي منتظم لملفات RDB و AOF
# 1. استخدم cron لنسخ الملفات
0 2 * * * cp /var/lib/redis/dump.rdb /backup/dump-$(date +\%Y\%m\%d).rdb
0 2 * * * cp /var/lib/redis/appendonly.aof /backup/aof-$(date +\%Y\%m\%d).aof
# 2. إنشاء لقطة باستخدام BGSAVE ثم النسخ الاحتياطي
redis-cli BGSAVE
sleep 10 # انتظر اكتمال اللقطة
cp /var/lib/redis/dump.rdb /backup/
استراتيجية الاسترداد
# إذا كان كل من RDB و AOF موجودين، Redis يفضل AOF
# 1. إيقاف Redis
redis-cli SHUTDOWN NOSAVE
# 2. استعادة الملف
cp /backup/appendonly.aof /var/lib/redis/
# 3. بدء Redis
redis-server
مراقبة الاستمرارية
التحقق من حالة الاستمرارية
# عرض حالة RDB
INFO persistence
# المقاييس الرئيسية:
# rdb_last_save_time: وقت آخر لقطة
# rdb_changes_since_last_save: التغييرات منذ آخر لقطة
# aof_enabled: هل AOF مفعّل
# aof_rewrite_in_progress: إعادة كتابة AOF قيد التقدم
مراقبة أداء الاستمرارية
# مراقبة مدة لقطة RDB
redis-cli INFO persistence | grep rdb_last_bgsave_time_sec
# مراقبة مدة إعادة كتابة AOF
redis-cli INFO persistence | grep aof_last_rewrite_time_sec
❓ أسئلة شائعة
📖 ملخص
- RDB هو لقطة — يحفظ البيانات في نقطة زمنية
- AOF هو سجل — يسجل كل عملية كتابة
- RDB له استرداد سريع وملفات صغيرة لكن قد يفقد بيانات
- AOF أكثر أمانًا لكن ملفات أكبر واسترداد أبطأ
- الاستمرارية الهجينة تجمع فوائد كلاهما (Redis 4.0+)
- استخدم RDB للتخزين المؤقت، AOF أو الهجين لتخزين البيانات
- قم بنسخ احتياطي منتظم لملفات الاستمرارية وراقب الأداء
📝 تمارين
- إعدادات RDB: كوّن شروط لقطة RDB تلقائية، شغّل BGSAVE يدويًا
- إعدادات AOF: فعّل AOF، اختبر اختلافات الأداء بين استراتيجيات المزامنة
- إعادة كتابة AOF: شغّل إعادة كتابة AOF ولاحظ تغيرات حجم الملف
- استرداد البيانات: انسخ ملفات RDB/AOF احتياطيًا وحاكِ استرداد البيانات
الدرس التالي
في الدرس التالي، سنتعلم أمان Redis، والذي يغطي إعدادات الأمان والتحكم في الوصول.



