يحتفظ Redis بالبيانات في الذاكرة ويرد في نحو جزء من الألف من الثانية، ولهذا يقف خلف تطبيقات كثيرة بوصفه ذاكرة تخزين مؤقت أو طابورًا أو مخزنًا للجلسات. التثبيت أمر واحد. العمل الحقيقي في الإعدادات الافتراضية: لا حد للذاكرة، ولقطات قد تضيع معها آخر الكتابات، وخطآن سهلان يمسحان بياناتك بصمت أو يعطّلان كلمة المرور. يغطي هذا الدليل كل ذلك على Ubuntu 24.04. نفّذنا كل خطوة على صورتنا، والأرقام من خادم Micro (2 vCPU و2 GB).
تحتاج إلى مستخدم بصلاحيات sudo. دليل إعداد Ubuntu ينشئ واحدًا.
1. التثبيت
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
استغرق التثبيت 13 ثانية وأعطانا Redis 7.0.15. يبدأ فورًا ومع كل إقلاع، ويرد بـ PONG، ويستمع على الخادم نفسه فقط: 127.0.0.1:6379 و[::1]:6379، مع protected-mode yes. ومن دون بيانات استخدم 13.5 MB من الذاكرة.
كان في السجل تحذير بالفعل:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
يحفظ Redis على القرص من نسخة عن نفسه ينشئها عبر fork، ومع الإعداد الافتراضي للنواة قد يفشل هذا الـ fork عندما تضيق الذاكرة. أصلح ذلك مرة واحدة:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
بعد إعادة التشغيل اختفى التحذير.
2. حدّد ذاكرته
في الإعداد الأصلي تكون قيمة maxmemory هي 0، أي بلا حد، والسياسة noeviction. سيظل Redis يأخذ الذاكرة حتى تنفد من الخادم. ضع سقفًا وقرّر ما يحدث عند بلوغه:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
اختبرنا السياستين بحد 64 MB و400,000 عملية كتابة:
noeviction(الافتراضية): توقفت الذاكرة عند 63 MB وفشلت الكتابات الجديدة بالخطأOOM command not allowed when used memory > 'maxmemory'. مناسبة للطابور أو لأي شيء لا تستطيع خسارته.allkeys-lru: تخلّص Redis من المفاتيح الأقدم استخدامًا، وعددها 48,606، ومرّت كل الكتابات. مناسبة لذاكرة التخزين المؤقت.
يحفظ CONFIG REWRITE الإعدادات الحالية في /etc/redis/redis.conf كي تبقى بعد إعادة التشغيل. ويضيف كذلك سطرًا عليك معرفته قبل الخطوة 4.
3. اختر طريقة الحفظ على القرص
افتراضيًا يكتب Redis لقطة (/var/lib/redis/dump.rdb) بعد تغيير واحد خلال ساعة، أو 100 خلال خمس دقائق، أو 10,000 خلال دقيقة. اختبرنا ثلاث طرق لإيقافه:
| كيف توقف Redis | لقطات فقط (افتراضي) | مع ملف AOF |
|---|---|---|
systemctl restart | لم يضع شيء: يحفظ عند الإيقاف | لم يضع شيء |
قُتل بـ kill -9 | اختفى المفتاح المكتوب بعد آخر لقطة | مفتاح كُتب قبل ثانيتين بقي موجودًا |
في الحالتين أعاد systemd تشغيل Redis تلقائيًا خلال ثوانٍ.
إذا كان في Redis بيانات ستفتقدها، ففعّل ملف AOF (append-only file). يسجّل كل كتابة ويدفعها إلى القرص مرة كل ثانية. افعل ذلك على الخادم وهو يعمل، لا بتعديل الملف:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
جرّبنا الطريق الآخر أولًا، فكلّفنا بياناتنا. غيّرنا appendonly no إلى appendonly yes في redis.conf وأعدنا التشغيل. عاد Redis بملف AOF فارغ ولم يحمّل شيئًا من اللقطة، فاختفت كل المفاتيح الموجودة. ثم عند إيقافه لاحقًا كتب محتواه الجديد، من دون المفاتيح القديمة، فوق dump.rdb أيضًا. يتجنب CONFIG SET ذلك: يكتب Redis ملف AOF أولًا من البيانات الموجودة في الذاكرة. بعد إعادة التشغيل كانت كل مفاتيحنا موجودة.
إذا كان Redis مجرد ذاكرة تخزين مؤقت يمكن أن تبدأ فارغة، فافعل العكس وأوقف الحفظ بالأمر redis-cli CONFIG SET save "".
4. ضع كلمة مرور
هذا هو الفخ الثاني. بعد أي CONFIG REWRITE يضيف Redis 7 هذا السطر في نهاية redis.conf:
user default on nopass ~* &* +@all
ومعناه «المستخدم الافتراضي لا يحتاج كلمة مرور». بعد ذلك أضفنا requirepass في موضع أعلى من الملف وأعدنا التشغيل. ظل Redis يرد بـ PONG دون كلمة مرور، لأن سطر user يتغلب عليه. اضبط كلمة المرور عبر Redis نفسه:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
احفظ كلمة المرور في مكان آمن. يخزّنها Redis الآن على شكل تجزئة SHA-256 في سطر user default نفسه. بعد إعادة التشغيل رد redis-cli ping بـ NOAUTH Authentication required. ولم ينجح إلا مع كلمة المرور. مرّرها إلى redis-cli عبر المتغير REDISCLI_AUTH. مع -a تظهر في قائمة العمليات، ويحذّرك redis-cli من ذلك. وفي تطبيقك ضعها في عنوان Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. الوصول إليه من حاسوبك
أبقِ Redis على 127.0.0.1 واستخدم نفق SSH. استعمل منفذ SSH الخاص بخادمك، وهو في باقات NAT منفذك الشخصي:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
ما دام النفق يعمل، يتحدث redis-cli -p 6380 وأدوات سطح المكتب على حاسوبك مع Redis على الخادم، ولا يُفتح شيء جديد على الإنترنت. مع دليل مفاتيح SSH يدخل النفق دون كلمة مرور.
ما مدى سرعته
على خادم الاختبار Micro أعطانا redis-benchmark مع 50 عميلًا:
| الاختبار | طلبات في الثانية | التأخير الوسيط |
|---|---|---|
| SET | 30,303 | 1.0 ms |
| GET | 35,149 | 0.9 ms |
| SET، 16 أمرًا في كل ذهاب وإياب | 272,109 | 2.4 ms |
| GET، 16 أمرًا في كل ذهاب وإياب | 414,938 | 1.3 ms |
لذاكرة التخزين المؤقت أو طابور المهام في تطبيق ويب، هذا أكثر بكثير مما ستحتاج. السرعة الإضافية تأتي من إرسال الأوامر دفعات (pipelining).
أي باقة تختار
يحتاج Redis إلى ذاكرة لبياناتك، وإلى القليل غير ذلك. Nano (2 vCPU، و1 GB، و$3 شهريًا) يشغّل Redis بجانب تطبيق صغير مع maxmemory 256mb. Micro (2 GB، و$5 شهريًا) يترك مساحة لذاكرة مؤقتة أكبر إلى جانب التطبيق. وإذا كان على جهاز آخر أن يتصل بـ Redis مباشرة، فاستخدم عنوان IPv4 خاصًا بك (بدءًا من Nano-IP بسعر $8 شهريًا) واسمح لذلك العنوان وحده في جدار الحماية. كل الباقات في صفحة VPS، والدفع بـ USDT أو USDC أو ETH على شبكات Base أو Ethereum أو Polygon.
التعليقات
لا تعليقات بعد. كن الأول.