Redis: استمرارية Redis

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

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

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

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

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


2. استمرارية RDB

(1) ما هو RDB؟

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

الميزات:

(2) إعدادات 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

(3) تشغيل RDB يدويًا

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

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

(4) موقع ملف RDB

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

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

(5) استرداد RDB

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

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

# 2. ابدأ Redis
redis-server

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

(6) إيجابيات وسلبيات RDB

الإيجابيات:

السلبيات:


3. استمرارية AOF

(1) ما هو AOF؟

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

الميزات:

(2) إعدادات 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

(3) استراتيجيات مزامنة AOF

الاستراتيجية الوصف الأداء الأمان
always مزامنة عند كل كتابة الأبطأ الأكثر أمانًا
everysec مزامنة مرة كل ثانية متوسط آمن بشكل معقول (فقدان 1 ثانية كحد أقصى)
no ترك للنظام التشغيل الأسرع الأقل أمانًا
💡 توصية: appendfsync everysec — يوازن بين الأداء والأمان.

(4) إعادة كتابة 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

(5) استرداد AOF

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

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

# 2. ابدأ Redis
redis-server

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

(6) إصلاح ملف AOF

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

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

(7) إيجابيات وسلبيات AOF

الإيجابيات:

السلبيات:


4. مقارنة RDB مع AOF

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

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

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

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

CONF
# تمكين AOF
appendonly yes

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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/

(5) استراتيجية الاسترداد

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

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

# 3. بدء Redis
redis-server

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

(1) التحقق من حالة الاستمرارية

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

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

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

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:

BASH
# التحقق من حالة الاستمرارية
127.0.0.1:6379> INFO persistence
# وقت آخر حفظ RDB
rdb_last_save_time:1719800000
# حالة AOF
aof_enabled:1
aof_current_size:1048576

❓ أسئلة شائعة

س هل يمكن تمكين 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 احتياطيًا وحاكِ استرداد البيانات

8. الدرس التالي

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

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%