إعدادات Redis
إعدادات Redis مرنة وقوية. يغطي هذا الدرس ملف الإعدادات والخيارات الشائعة.
موقع ملف الإعدادات
طرق التثبيت المختلفة تضع ملف الإعدادات في مواقع مختلفة:
| طريقة التثبيت | موقع ملف الإعدادات |
|---|---|
| apt (Ubuntu) | /etc/redis/redis.conf |
| yum (CentOS) | /etc/redis.conf |
| المصدر | دليل المصدر redis.conf، يجب النسخ يدويًا |
| Homebrew (Mac) | /usr/local/etc/redis.conf |
| Windows | دليل التثبيت redis.windows.conf |
إنشاء ملف الإعدادات بعد التثبيت من المصدر
BASH
# إنشاء دليل الإعدادات
sudo mkdir -p /etc/redis
# نسخ ملف الإعدادات
sudo cp /tmp/redis-7.0.11/redis.conf /etc/redis/redis.conf
# إنشاء دليل البيانات
sudo mkdir -p /var/lib/redis
sudo chown redis:redis /var/lib/redis
تنسيق ملف الإعدادات
تستخدم ملفات إعدادات Redis تنسيقًا بسيطًا لمفتاح-قيمة:
CONF
# هذا تعليق
# التنسيق الأساسي
config-key value
# مثال
port 6379
bind 127.0.0.1
daemonize yes
💡 ملاحظة: يتم فصل مفاتيح وقيم الإعدادات بمسافة — لا حاجة لعلامة يساوي.
خيارات الإعدادات الأساسية
إعدادات الشبكة
CONF
# ربط عنوان IP
# 127.0.0.1 — الوصول المحلي فقط
# 0.0.0.0 — السماح لجميع عناوين IP (خطير!)
# 192.168.1.100 — الربط بعنوان IP محدد
bind 127.0.0.1
# منفذ الاستماع
port 6379
# الوضع المحمي (يُوصى بإبقائه مفعّلاً)
# yes: السماح فقط بالاتصالات المحلية إلا إذا تم تعيين bind أو كلمة مرور
# no: السماح بالاتصالات عن بُعد
protected-mode yes
# حجم تراكم الاتصالات TCP
tcp-backlog 511
# مهلة الخمول للعميل بالثواني (0 يعني عدم قطع الاتصال أبدًا)
timeout 0
# فاصل keepalive TCP بالثواني
tcp-keepalive 300
⚠️ تحذير أمني:
bind 0.0.0.0 يسمح بالوصول من جميع عناوين IP — يجب تعيين كلمة مرور!
الإعدادات العامة
CONF
# التشغيل كخلفية (daemon)
daemonize no
# موقع ملف PID
pidfile /var/run/redis/redis-server.pid
# مستوى التسجيل
# debug: الكثير من معلومات التصحيح
# verbose: الكثير من المعلومات المفيدة
# notice: متوسط (موصى به للإنتاج)
# warning: الرسائل المهمة فقط
loglevel notice
# موقع ملف السجل
# سلسلة فارغة تعني الإخراج إلى stdout
logfile /var/log/redis/redis-server.log
# عدد قواعد البيانات (الافتراضي 16، مرقمة 0-15)
databases 16
إدارة الذاكرة
CONF
# الحد الأقصى لاستخدام الذاكرة
# التنسيق: 1kb، 5mb، 2gb، إلخ
# 0 يعني غير محدود (خطير!)
maxmemory 256mb
# سياسة الإخلاء عند الوصول إلى حد الذاكرة
# volatile-lru: إخلاء المفاتيح ذات TTL (خوارزمية LRU)
# allkeys-lru: إخلاء أي مفتاح (خوارزمية LRU)
# volatile-lfu: إخلاء المفاتيح ذات TTL (خوارزمية LFU)
# allkeys-lfu: إخلاء أي مفتاح (خوارزمية LFU)
# volatile-random: إخلاء عشوائي للمفاتيح ذات TTL
# allkeys-random: إخلاء عشوائي لأي مفتاح
# volatile-ttl: إخلاء المفاتيح ذات أقصر TTL
# noeviction: عدم الإخلاء، إرجاع خطأ (الافتراضي)
maxmemory-policy allkeys-lru
# حجم عينة LRU/LFU
# القيم الأعلى أكثر دقة لكنها تستخدم CPU أكثر
maxmemory-samples 5
💡 كيفية اختيار سياسة الإخلاء؟
- سيناريوهات التخزين المؤقت:
allkeys-lruأوallkeys-lfu - سيناريوهات الاستمرارية:
noevictionأوvolatile-lru
إعدادات الاستمرارية (RDB)
CONF
# شروط تشغيل لقطة RDB
# save <seconds> <changes>
# تغيير واحد على الأقل في 900 ثانية → تشغيل لقطة
save 900 1
save 300 10
save 60 10000
# تعطيل RDB (علّق save أو عيّنها فارغة)
# save ""
# اسم ملف RDB
dbfilename dump.rdb
# دليل تخزين ملف RDB
dir /var/lib/redis
# ضغط RDB (يُوصى بإبقائه مفعّلاً)
rdbcompression yes
# مجموع اختباري RDB (يُوصى بإبقائه مفعّلاً)
rdbchecksum yes
إعدادات الاستمرارية (AOF)
CONF
# تمكين AOF
appendonly no
# اسم ملف AOF
appendfilename "appendonly.aof"
# استراتيجية مزامنة AOF
# always: مزامنة عند كل كتابة (الأكثر أمانًا، الأبطأ)
# everysec: مزامنة مرة كل ثانية (موصى به)
# no: ترك للنظام التشغيل (الأسرع، الأقل أمانًا)
appendfsync everysec
# تعطيل fsync أثناء إعادة كتابة AOF
no-appendfsync-on-rewrite no
# حجم ملف AOF الذي يشغل إعادة الكتابة
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
💡 RDB مقابل AOF:
- RDB: لقطة، ملفات صغيرة، استرداد سريع، لكن قد تفقد بيانات
- AOF: سجل، بيانات أكثر أمانًا، لكن ملفات أكبر، استرداد أبطأ
- التوصية: تمكين كل من RDB و AOF
إعدادات الأمان
CONF
# تعيين كلمة المرور (قبل Redis 6.0)
requirepass yourpassword
# إعادة تسمية الأوامر الخطيرة
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
⚠️ ملاحظة: Redis 6.0+ يُوصى باستخدام ACL للتحكم في الوصول بشكل أكثر مرونة وأمانًا.
إعدادات الحدود
CONF
# الحد الأقصى لعدد اتصالات العملاء
# 10000 يعني ما يصل إلى 10000 عميل
maxclients 10000
# الحد الأقصى لمخزن الإدخال المؤقت
client-query-buffer-limit 1gb
# الحد الأقصى لمخزن الإخراج المؤقت
# normal: العملاء العاديون
# replica: عقد النسخ المتماثل
# pubsub: عملاء النشر/الاشتراك
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
استخدام أمر CONFIG
يمكنك عرض وتعديل الإعدادات في وقت التشغيل.
عرض الإعدادات
REDIS
# عرض جميع الإعدادات
CONFIG GET *
# يُرجع قائمة متناوبة من مفاتيح وقيم الإعدادات
# عرض إعداد محدد
CONFIG GET port
1) "port"
2) "6379"
CONFIG GET maxmemory
1) "maxmemory"
2) "0"
# عرض إعدادات متعددة (باستخدام wildcard)
CONFIG GET maxmemory*
1) "maxmemory"
2) "0"
3) "maxmemory-policy"
4) "noeviction"
5) "maxmemory-samples"
6) "5"
تعديل الإعدادات
REDIS
# تعيين الحد الأقصى للذاكرة
CONFIG SET maxmemory 256mb
OK
# تعيين مستوى التسجيل
CONFIG SET loglevel "debug"
OK
# تعيين عدد قواعد البيانات
CONFIG SET databases 32
OK
⚠️ ملاحظة: التغييرات التي تتم باستخدام CONFIG SET تصبح سارية المفعول فورًا لكنها تُفقد عند إعادة التشغيل. استخدم CONFIG REWRITE للحفظ في ملف الإعدادات.
حفظ الإعدادات في ملف
REDIS
# كتابة الإعدادات الحالية إلى ملف الإعدادات
CONFIG REWRITE
OK
CONFIG REWRITE سوف:
- قراءة ملف الإعدادات الأصلي
- إعادة الكتابة بالإعدادات الحالية في وقت التشغيل
- الحفاظ على التعليقات والتنسيق
إعادة تعيين الإعدادات
REDIS
# إعادة تعيين الإحصائيات
CONFIG RESETSTAT
OK
سيناريوهات الإعدادات الشائعة
السيناريو 1: بيئة التطوير
CONF
bind 127.0.0.1
port 6379
daemonize no
logfile ""
databases 16
save ""
appendonly no
السيناريو 2: بيئة الإنتاج
CONF
bind 127.0.0.1
port 6379
daemonize yes
logfile /var/log/redis/redis.log
databases 16
# إدارة الذاكرة
maxmemory 2gb
maxmemory-policy allkeys-lru
# الاستمرارية
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
# الأمان
requirepass your_strong_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""
السيناريو 3: إعدادات خادم التخزين المؤقت
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 4gb
maxmemory-policy allkeys-lru
# لا حاجة للاستمرارية للتخزين المؤقت
save ""
appendonly no
السيناريو 4: إعدادات قائمة انتظار الرسائل
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 1gb
maxmemory-policy noeviction
# قوائم انتظار الرسائل تحتاج استمرارية
appendonly yes
appendfsync everysec
استخدام معاملات سطر الأوامر
يمكنك تجاوز قيم الإعدادات عند بدء Redis:
BASH
# تجاوز إعداد واحد
redis-server --port 6380
redis-server --maxmemory 512mb
redis-server --requirepass mypassword
# تجاوز إعدادات متعددة
redis-server --port 6380 --maxmemory 512mb --daemonize yes
# استخدام ملف إعدادات + تجاوز بعض الإعدادات
redis-server /etc/redis/redis.conf --port 6380
ضبط الإعدادات الديناميكي
ضبط حدود الذاكرة
REDIS
# التحقق من استخدام الذاكرة الحالي
INFO memory
used_memory:1048576
used_memory_human:1.00M
# ضبط الحد الأقصى للذاكرة
CONFIG SET maxmemory 512mb
OK
# حفظ الإعدادات
CONFIG REWRITE
OK
ضبط مستوى التسجيل
REDIS
# تمكين تسجيل التصحيح مؤقتًا
CONFIG SET loglevel debug
OK
# الاستعادة بعد التصحيح
CONFIG SET loglevel notice
OK
ضبط سجل الاستعلامات البطيئة
REDIS
# تعيين عتبة الاستعلام البطيء (ميكروثانية)
CONFIG SET slowlog-log-slower-than 10000
OK
# تعيين الحد الأقصى لعدد إدخالات سجل الاستعلام البطيء
CONFIG SET slowlog-max-len 128
OK
# عرض سجل الاستعلام البطيء
SLOWLOG GET 10
التحقق من الإعدادات
التحقق من صيغة ملف الإعدادات
BASH
# التحقق عند بدء التشغيل
redis-server /etc/redis/redis.conf --test-memory 100
عرض الإعدادات الجارية
BASH
# عرض من سطر الأوامر
redis-cli CONFIG GET maxmemory
# عرض جميع الإعدادات
redis-cli CONFIG GET *
❓ أسئلة شائعة
س هل أحتاج إلى إعادة تشغيل Redis بعد تغيير الإعدادات؟
ج تغييرات الإعدادات عبر CONFIG SET تصبح سارية المفعول فورًا دون إعادة تشغيل. لكنها تُفقد عند إعادة التشغيل — استخدم CONFIG REWRITE لإبقائها。
س كيف أعرض الإعدادات الافتراضية لـ Redis؟
ج ملف
redis.conf في توزيعة Redis المصدرية يحتوي على إعدادات افتراضية مفصلة مع شروحات。س ماذا يحدث إذا تم تعيين maxmemory إلى 0؟
ج 0 يعني ذاكرة غير محدودة. سيستخدم Redis أكبر قدر ممكن من الذاكرة، مما قد يؤدي إلى OOM وقتل العملية من قبل النظام。
س كيف أقوم بتعطيل الأوامر الخطيرة؟
ج استخدم
rename-command FLUSHALL "" في ملف الإعدادات لإعادة تسمية أمر إلى سلسلة فارغة。س هل يمكن لملف إعدادات تضمين ملفات إعدادات أخرى؟
ج نعم، استخدم
include /path/to/other.conf。📖 ملخص
- موقع ملف الإعدادات يختلف حسب طريقة التثبيت؛ التثبيت من المصدر يحتاج نسخًا يدويًا
- مجالات الإعدادات الأساسية: الشبكة، الذاكرة، الاستمرارية، الأمان
- CONFIG GET/SET يعرض ويعدل الإعدادات في وقت التشغيل
- CONFIG REWRITE يحفظ الإعدادات في ملف
- سيناريوهات مختلفة تحتاج استراتيجيات إعدادات مختلفة
- عيّن دائمًا كلمات المرور وحدود الذاكرة في الإنتاج
📝 تمارين
- عرض الإعدادات: استخدم CONFIG GET للتحقق من إعدادات Redis الخاصة بك، ابحث عن قيم maxmemory و maxmemory-policy
- تعديل الإعدادات: استخدم CONFIG SET لتغيير maxmemory إلى 128mb، ثم احفظ باستخدام CONFIG REWRITE
- إعدادات سيناريو: اكتب ملف إعدادات Redis لسيناريو التخزين المؤقت
- تعطيل الأوامر: قم بتعطيل أوامر FLUSHALL و FLUSHDB في ملف الإعدادات
الدرس التالي
في الدرس التالي، سنتعلم نظرة عامة على أنواع بيانات Redis، والتي تغطي أنواع البيانات الخمسة الأساسية في Redis.



