إعدادات 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 سوف:

  1. قراءة ملف الإعدادات الأصلي
  2. إعادة الكتابة بالإعدادات الحالية في وقت التشغيل
  3. الحفاظ على التعليقات والتنسيق

إعادة تعيين الإعدادات

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

📖 ملخص

📝 تمارين

  1. عرض الإعدادات: استخدم CONFIG GET للتحقق من إعدادات Redis الخاصة بك، ابحث عن قيم maxmemory و maxmemory-policy
  2. تعديل الإعدادات: استخدم CONFIG SET لتغيير maxmemory إلى 128mb، ثم احفظ باستخدام CONFIG REWRITE
  3. إعدادات سيناريو: اكتب ملف إعدادات Redis لسيناريو التخزين المؤقت
  4. تعطيل الأوامر: قم بتعطيل أوامر FLUSHALL و FLUSHDB في ملف الإعدادات

الدرس التالي

في الدرس التالي، سنتعلم نظرة عامة على أنواع بيانات Redis، والتي تغطي أنواع البيانات الخمسة الأساسية في Redis.

100%