استمرارية Redis

Redis تخزّن البيانات في الذاكرة. الاستمرارية تحفظ تلك البيانات على القرص. يغطي هذا الدرس طرق الاستمرارية RDB و AOF.

لماذا الاستمرارية؟

Redis هي قاعدة بيانات في الذاكرة:

بيانات الذاكرة → استمرارية → ملف القرص
ملف القرص → استرداد → بيانات الذاكرة

يوفر Redis طريقتين للاستمرارية:

استمرارية RDB

ما هو RDB؟

RDB (Redis Database) يحفظ البيانات في نقطة زمنية محددة كملف لقطة ثنائي.

الميزات:

إعدادات RDB

التكوين في redis.conf:

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 يدويًا

REDIS
# SAVE: لقطة محظورة (استخدم بحذر في الإنتاج)
SAVE
OK  # اكتملت اللقطة، تم حظر Redis خلال هذا الوقت

# BGSAVE: لقطة خلفية (موصى به)
BGSAVE
Background saving started  # يُرجع فورًا، يعمل في الخلفية
⚠️ ملاحظة: SAVE يحظر Redis حتى اكتمال اللقطة. BGSAVE يعمل في الخلفية ولا يحظر.

موقع ملف RDB

BASH
# الموقع الافتراضي
/var/lib/redis/dump.rdb

# أو الدليل المحدد في الإعدادات
dir /data/redis
dbfilename dump.rdb

استرداد RDB

Redis يقوم تلقائيًا بتحميل ملف RDB عند بدء التشغيل:

BASH
# 1. ضع ملف RDB في الدليل المكون
cp dump.rdb /var/lib/redis/

# 2. ابدأ Redis
redis-server

# Redis يقوم تلقائيًا بتحميل dump.rdb لاسترداد البيانات

إيجابيات وسلبيات RDB

الإيجابيات:

السلبيات:

استمرارية AOF

ما هو AOF؟

AOF (Append Only File) يسجل كل أمر كتابة. عند الاسترداد، يعيد Redis تنفيذ تلك الأوامر.

الميزات:

إعدادات AOF

CONF
# تمكين 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 ينمو باستمرار. إعادة الكتابة تضغطه:

REDIS
# تشغيل إعادة كتابة AOF يدويًا
BGREWRITEAOF
Background append only file rewriting started

مبدأ إعادة الكتابة:

شروط تشغيل إعادة الكتابة:

CONF
# حجم ملف AOF نما بنسبة 100% منذ آخر إعادة كتابة
auto-aof-rewrite-percentage 100

# يجب أن يكون ملف AOF على الأقل 64MB لتشغيل إعادة الكتابة
auto-aof-rewrite-min-size 64mb

استرداد AOF

Redis يقوم تلقائيًا بتحميل ملف AOF عند بدء التشغيل:

BASH
# 1. ضع ملف AOF في الدليل المكون
cp appendonly.aof /var/lib/redis/

# 2. ابدأ Redis
redis-server

# Redis يقوم تلقائيًا بتحميل appendonly.aof لاسترداد البيانات

إصلاح ملف AOF

BASH
# التحقق من ملف AOF
redis-check-aof appendonly.aof

# إصلاح ملف AOF
redis-check-aof --fix appendonly.aof

إيجابيات وسلبيات AOF

الإيجابيات:

السلبيات:

مقارنة RDB مع AOF

الجانب RDB AOF
حجم الملف صغير (ثنائي مضغوط) كبير (أوامر نصية)
سرعة الاسترداد سريعة بطيئة
أمان البيانات قد يفقد دقائق من البيانات فقدان 1 ثانية كحد أقصى
تأثير على الأداء منخفض (لقطة خلفية) متوسط (fsync متكرر)
قابلية قراءة الملف غير قابل للقراءة قابل للقراءة
حالة الاستخدام نسخ احتياطي، تكرار متطلبات أمان بيانات عالية

الاستمرارية الهجينة

يدعم Redis 4.0+ الاستمرارية الهجينة، التي تجمع فوائد RDB و AOF.

تكوين الاستمرارية الهجينة

CONF
# تمكين AOF
appendonly yes

# تمكين الاستمرارية الهجينة
aof-use-rdb-preamble yes

مبدأ الاستمرارية الهجينة

أثناء إعادة كتابة AOF:

  1. اكتب البيانات الحالية بتنسيق RDB أولاً (سريع، مضغوط)
  2. ثم ألحق عمليات الكتابة الجديدة بتنسيق AOF
هيكل ملف AOF:
[بيانات لقطة بتنسيق RDB] + [أوامر إضافية بتنسيق AOF]

مزايا الاستمرارية الهجينة

💡 توصية: Redis 4.0+ يجب أن يستخدم الاستمرارية الهجينة للأداء والأمان معًا.

أفضل ممارسات الاستمرارية

السيناريو 1: تخزين مؤقت فقط

CONF
# التخزين المؤقت قد لا يحتاج استمرارية، أو RDB فقط
save 900 1
appendonly no

السيناريو 2: تخزين بيانات

CONF
# تخزين البيانات يستخدم AOF أو الاستمرارية الهجينة
save 900 1
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

السيناريو 3: توفر عالٍ

CONF
# تمكين كل من RDB و AOF
save 900 1
save 300 10
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

استراتيجية النسخ الاحتياطي

BASH
# نسخ احتياطي منتظم لملفات 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/

استراتيجية الاسترداد

BASH
# إذا كان كل من RDB و AOF موجودين، Redis يفضل AOF
# 1. إيقاف Redis
redis-cli SHUTDOWN NOSAVE

# 2. استعادة الملف
cp /backup/appendonly.aof /var/lib/redis/

# 3. بدء Redis
redis-server

مراقبة الاستمرارية

التحقق من حالة الاستمرارية

REDIS
# عرض حالة RDB
INFO persistence

# المقاييس الرئيسية:
# rdb_last_save_time: وقت آخر لقطة
# rdb_changes_since_last_save: التغييرات منذ آخر لقطة
# aof_enabled: هل AOF مفعّل
# aof_rewrite_in_progress: إعادة كتابة AOF قيد التقدم

مراقبة أداء الاستمرارية

BASH
# مراقبة مدة لقطة RDB
redis-cli INFO persistence | grep rdb_last_bgsave_time_sec

# مراقبة مدة إعادة كتابة AOF
redis-cli INFO persistence | grep aof_last_rewrite_time_sec

❓ أسئلة شائعة

س هل يمكن تمكين RDB و AOF في نفس الوقت؟
ج نعم. يستخدم Redis كلتا الطريقتين ويفضل AOF للاسترداد。
س كيف أختار طريقة الاستمرارية؟
ج للتخزين المؤقت، استخدم RDB أو لا تستخدم استمرارية. لتخزين البيانات، استخدم AOF أو الاستمرارية الهجينة。
س ماذا لو أصبح ملف AOF كبيرًا جدًا؟
ج استخدم BGREWRITEAOF أو كوّن شروط إعادة كتابة تلقائية。
س هل تؤثر الاستمرارية على الأداء؟
ج هناك بعض التأثير. RDB له تأثير صغير (لقطة خلفية)، AOF له تأثير معتدل (fsync متكرر).
س كيف أقلل فقدان البيانات؟
ج استخدم AOF مع appendfsync everysec — فقدان 1 ثانية كحد أقصى.

📖 ملخص

📝 تمارين

  1. إعدادات RDB: كوّن شروط لقطة RDB تلقائية، شغّل BGSAVE يدويًا
  2. إعدادات AOF: فعّل AOF، اختبر اختلافات الأداء بين استراتيجيات المزامنة
  3. إعادة كتابة AOF: شغّل إعادة كتابة AOF ولاحظ تغيرات حجم الملف
  4. استرداد البيانات: انسخ ملفات RDB/AOF احتياطيًا وحاكِ استرداد البيانات

الدرس التالي

في الدرس التالي، سنتعلم أمان Redis، والذي يغطي إعدادات الأمان والتحكم في الوصول.

100%