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) אחרי שינוי 1 בשעה, 100 בחמש דקות או 10,000 בדקה. בדקנו שלוש דרכים לעצור אותו:
| איך Redis נעצר | רק תמונות מצב (ברירת מחדל) | עם קובץ AOF |
|---|---|---|
systemctl restart | שום דבר לא אבד: הוא שומר בכיבוי | שום דבר לא אבד |
נהרג עם kill -9 | המפתח שנכתב אחרי תמונת המצב האחרונה נעלם | מפתח שנכתב 2 שניות לפני כן נשאר |
בשני המקרים 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.
תגובות
אין עדיין תגובות. היו הראשונים.