הקדמה
Redis הוא מאגר נתונים מקורה פתוח, המאוחסן בזכרון המיועד לאחסון מפתח-ערך. מאגר נתונים מפתח-ערך הוא סוג של מסד נתונים NoSQL שבו המפתחות משמשים כמזהים ייחודיים לערכיהם המשוייכים. כל אינסטנס Redis נתון כמה מסדי נתונים, כאשר כל אחד מהם יכול להכיל מספר רב של מפתחות שונים של מגוון רחב של סוגי נתונים.
במדריך זה, תלמד כיצד לבחור מסד נתונים, להעביר מפתחות בין מסדי נתונים, ולנהל ולמחוק מפתחות.
איך להשתמש במדריך זה
המדריך נכתב כגליון עזר עם דוגמאות עצמאיות. אנו ממליצים לך לקפוץ לכל סעיף שקשור למשימה שאתה מנסה להשלים.
הפקודות שמוצגות במדריך זה נבדקו על שרת Ubuntu 22.04 המופעל Redis גרסה 6.0.16. כדי להגדיר סביבה דומה, תוכל לעקוב אחר שלב 1 במדריך שלנו על איך להתקין ולאבטח את Redis על Ubuntu 22.04. נדגים איך הפקודות הללו נמצאות בשימוש על ידי הרצתן עם redis-cli
, ממשק השורת פקודה של Redis. שים לב שאם אתה משתמש בממשק Redis שונה — כמו Redli, לדוגמה — פלט מדויק של פקודות מסוימות עשוי להשתנות.
באופן אלטרנטיבי, תוכל לספק מופע מנוהל של מסד נתונים Redis כדי לבדוק את הפקודות האלה, אך בהתאם לרמת השליטה המותרת על ידי ספק מסד הנתונים שלך, ייתכן שכמה מהפקודות במדריך זה לא יעבדו כפי שתוארו. כדי לספק מסד נתונים ניהולי של DigitalOcean, עקוב אחר מסמך התיעוד של מוצרי מסדי נתונים ניהוליים שלנו. לאחר מכן, עליך להתקין את Redli או ל הגדיר טונל TLS כדי להתחבר למסד נתונים הניהולי באמצעות TLS.
ניהול מסדי נתונים
מחוץ לקופסה, מופע Redis תומך באופן ברירת מחדל ב-16 מסדי נתונים לוגיים. אלה מסדי נתונים מופרדים ביניהם בצורה אפקטיבית, וכאשר אתה מפעיל פקודה באחד מהם, זה לא משפיע על הנתונים שמאוחסנים במסדי נתונים אחרים במופע Redis שלך.
מסדי הנתונים של Redis מסופרים מ-0
עד 15
, ולפי ברירת מחדל, אתה מתחבר למסד נתונים 0
כאשר אתה מתחבר למופע Redis שלך. עם זאת, אתה יכול לשנות את המסד נתונים שאתה משתמש בו באמצעות פקודת select
לאחר שאתה מתחבר:
- select 15
אם בחרת במסד נתונים שונה מ-0
, זה יתבטא במחולל הפקודות של redis-cli
:
-
כדי להחליף את כל הנתונים המאוחסנים במסד נתונים אחד עם הנתונים במסד נתונים אחר, השתמש בפקודת swapdb
. בדוגמה הבאה נחליף את הנתונים במסד נתונים 6
עם הנתונים במסד נתונים 8
, וכל הלקוחות המחוברים לאחד מהמסדים יוכלו ליישם שינויים מיידית:
- swapdb 6 8
פקודת swapdb
תחזיר OK
אם ההחלפה הצליחה.
אם ברצונך להעביר מפתח למופע Redis שונה, אתה יכול להריץ את migrate
. פקודה זו מבטיחה שהמפתח קיים במטרה לפני שהיא מוחקת אותו מהמקור. כאשר אתה מפעיל migrate
, הפקודה חייבת לכלול את הרכיבים הבאים בסדר הזה:
- שם המחשב או כתובת ה-IP של מסד הנתונים היעד
- מספר הפורט של מסד הנתונים היעד
- שם המפתח שברצונך להעביר
- מספר מסד הנתונים שברצונך לאחסן את המפתח במופע היעד
- A timeout, in milliseconds, which defines the maximum amount of idle communication time between the two machines. Note that this isn’t a time limit for the operation, but means that the operation should always make some level of progress within the defined length of time
להדגיש, הנה דוגמה:
- migrate 203.0.113.0 6379 key_1 7 8000
בנוסף, migrate
מאפשר את האפשרויות הבאות שניתן להוסיף לאחר הארגומנט timeout:
COPY
: מציין שהמפתח לא יימחק מהמקורREPLACE
: מציין שאם המפתח כבר קיים ביעד, הפעולהmigrate
תמחק ותחליף אותוKEYS
: במקום לספק מפתח ספציפי להעברה, ניתן להזין מחרוזת ריקה (""
) ולאזן להשתמש בתחביר של הפקודהkeys
כדי להעביר כל מפתח שמתאים לתבנית. למידע נוסף על איךkeys
עובד, קראו את המדריך שלנו על כיצד לאתר בעיות ב־Redis.
ניהול מפתחות
ישנם מספר פקודות Redis שימושיות לניהול מפתחות בלתי תלויות בסוג הנתונים שהן מחזיקות. חלק מהן מבוארים בסעיף הבא.
rename
ישנה את שם המפתח המצויין. אם זה מצליח, הוא יחזיר OK
:
- rename old_key new_key
ניתן להשתמש ב־randomkey
כדי להחזיר מפתח אקראי מבסיס הנתונים שנבחר כעת:
- randomkey
Output"any_key"
השתמש ב־type
כדי לקבוע איזה סוג של נתונים המפתח הנתון מחזיק. פלט הפקודה הזו יכול להיות או string
, list
, hash
, set
, zset
, או stream
:
- type key_1
Output"string"
אם המפתח שצוין אינו קיים, type
יחזיר none
.
אפשר להעביר מפתח יחיד לבסיס נתונים אחר באינסטנס Redis שלך עם הפקודה move
. הפקודה move
מקבלת את שם המפתח ואת מסד הנתונים שבו ברצונך להעביר את המפתח כארגומנטים. לדוגמה, כדי להעביר את המפתח key_1
למסד הנתונים 8
, תריץ את הפקודה הבאה:
- move key_1 8
move
יחזיר OK
אם העברת המפתח הצליחה.
מחיקת מפתחות
כדי למחוק מפתח אחד או יותר מכל סוג נתונים, השתמש בפקודה del
עם פירוש אחד או יותר של מפתחות שברצונך למחוק:
- del key_1 key_2
אם הפקודה מוחקת את המפתח(ות) בהצלחה, היא תחזיר (integer) 1
. אחרת, תחזיר (integer) 0
.
הפקודה unlink
מבצעת פונקציה דומה ל־del
, עם ההבדל היה ש־del
חוסם את הלקוח כשהשרת משיב את הזיכרון שנתפס על ידי המפתח. אם המפתח שמתוחקר נמצא קשור לאובייקט קטן, זמן החסימה כשהוא נמחק על ידי del
הוא קטן מאוד ואפשר שאין אפילו לתת לו להיבחר.
אך ייתכן שזה יהיה לא נוח אם, לדוגמה, המפתח שאתה מוחק מקושר לאובייקטים רבים, כמו דיוקנים עם אלפי או מיליוני שדות. למחיקת מפתח כזה יכול לקחת זמן ממור ותוכל להיחסם מביצוע כל פעולות אחרות עד שהוא יוסר ממטבע הזיכרון של השרת.
unlink
, בכל זאת, תחילה מקבע את עלות השחרור של הזיכרון הנלקח על ידי המפתח. אם היא קטנה, אז unlink
פועלת באופן זהה ל- del
על ידי מחיקת המפתח מיידית וגם חסימת הלקוח. אולם, אם יש עלות גבוהה לשחרור זיכרון עבור מפתח, unlink
תמחק את המפתח באופן אסינכרוני על ידי יצירת תהליך נוסף ומחזירה באופן שוטף זיכרון לרקע ללא חסימת הלקוח:
- unlink key_1
מאחר והרצת התהליך נמצאת ברקע, כללית מומלץ להשתמש ב- unlink
להסרת מפתחות מהשרת שלך כדי להפחית שגיאות בלקוחות שלך, אף על פי ש- del
יהיה מספיק במקרים רבים.
אזהרה: שתי הפקודות הבאות נחשבות מסוכנות. הפקודות flushdb
ו- flushall
ימחקו באופן בלתי הפיך את כל המפתחות במסד נתונים יחיד ואת כל המפתחות בכל מסדי הנתונים בשרת Redis, בהתאמה. מומלץ להריץ את הפקודות הללו רק אם אתה בטוח באופן מוחלט שברצונך למחוק את כל המפתחות במסד הנתונים או בשרת שלך.
זה עשוי להיות בתועלת שלך לשנות את שמות הפקודות האלו למשהו שיש לו סיכוי נמוך יותר להיבדק בטעות.
כדי למחוק את כל המפתחות בבסיס הנתונים הנבחר, השתמש בפקודה flushdb
:
- flushdb
כדי למחוק את כל המפתחות בכל בסיס נתונים בשרת Redis (כולל בסיס הנתונים שנבחר כעת), הפעל flushall
:
- flushall
גם flushdb
ו־flushall
מקבלים את האפשרות async
, שמאפשרת לך למחוק את כל המפתחות בבסיס נתונים יחיד או בכל בסיס נתונים באשכול באופן אסינכרוני. זה מאפשר להם לפעול בדרך דומה לפקודת unlink
, והם ייצורו תהליך חדש לשחרור זיכרון ברקע.
גיבוי של בסיס הנתונים שלך
כדי ליצור גיבוי של בסיס הנתונים הנבחר כעת, תוכל להשתמש בפקודה save
:
- save
זה יייצא דוגמת הנתונים הנוכחית כקובץ .rdb
, הוא קובץ הורדת בסיס נתונים שמחזיק בנתונים בפורמט סיריאליזציה פנימית, מדוחס.
save
רץ באופן סינכרוני ויחסום כל לקוחות אחרים המחוברים למסד הנתונים. לכן, תיעוד הפקודה save
ממליץ שקריאה זו נרדמת ונכמע כמעט אף פעם בסביבת ייצור. במקום זאת, הוא מציע להשתמש בפקודת bgsave
. מה שגורם ל־Redis לבצע שכפול של מסד הנתונים: ההורה ימשיך לשרת לקוחות כאשר התהליך הילד שומר את מסד הנתונים לפני יציאתו:
- bgsave
שימו לב שאם לקוחות מוסיפים או משנים נתונים כל עוד הפעולה bgsave
מתבצעת, השינויים האלה לא ייכלסו בתמונה.
בנוסף, ניתן לערוך את קובץ התצורה של Redis כך ש־Redis ישמור תמונת מסד נתונים אוטומטית (ידוע גם בשם snapshotting או במצב RDB) לאחר כמות מסוימת של זמן אם מינימום מסוים של שינויים נעשו במסד הנתונים. זה ידוע כ־נקודת שמירה. הגדרות נקודת השמירה הבאות מופעלות כברירת מחדל בקובץ redis.conf
:
. . .
save 900 1
save 300 10
save 60 10000
. . .
dbfilename "nextfile.rdb"
. . .
עם ההגדרות האלה, Redis יייצא תמונת מסד הנתונים לקובץ המוגדר על ידי הפרמטר dbfilename
כל 900 שניות אם לפחות מפתח אחד השתנה, כל 300 שניות אם לפחות 10 מפתחות השתנו, וכל 60 שניות אם לפחות 10000 מפתחות השתנו.
ניתן להשתמש בפקודת shutdown
כדי לגבות את נתוני Redis שלך ולסגור את החיבור. פקודה זו תחסום כל לקוח מחובר למסד הנתונים ואז תבצע פעולת save
אם לפחות נקודת שמירה אחת מוגדרת, במובן שהיא תייצא את מסד הנתונים במצבו הנוכחי לקובץ .rdb
תוך מניעת שינויים מצד הלקוחות.
נוסף, פקודת shutdown
תשטף שינויים לקובץ append-only של Redis לפני שהיא יצאה מהמערכת אם מצב append-only מופעל. מצב הקובץ append-only (AOF) משליך יצירת יומן של כל פעולת כתיבה בשרת בקובץ שמסתיים ב- .aof
אחרי כל תמונת מערכת. אפשר להפעיל את מצבי AOF ו-RDB על אותו שרת, ושימוש בשני שיטות הנמיכות הוא דרך יעילה לגבות את הנתונים שלך.
בקיצור, פקודת shutdown
היא בעצם פקודת save
מונעת שגיאה שגם תשטף את כל השינויים האחרונים לקובץ append-only ותסגור את החיבור למופע Redis:
אזהרה: פקודת shutdown
נחשבת כמסוכנת. על ידי חסימת לקוחות שרת ה-Redis שלך, תוכל להפוך את הנתונים שלך ללא זמינים למשתמשים ויישומים שתלויים בהם. מומלץ להריץ פקודה זו רק אם אתה בודק את ההתנהגות של Redis או אם אתה בטוח לחלוטין שברצונך לחסום את כל לקוחות שרת ה-Redis שלך.
למעשה, יתרון שיש בהמעניין לשנות את שם הפקודה למשהו עם סיכוי נמוך יותר להפעלה תקליתית.
- shutdown
אם לא הגדרת נקודות שמירה אך עדיין רוצה שה-Redis יבצע פעולת save
, צריך להוסיף את אפשרות ה- save
לפקודת shutdown
:
- shutdown save
אם הגדרת לפחות נקודת שמירה אחת אך ברצונך לכבות את שרת ה־Redis מבלי לבצע שמירה, תוכל להוסיף את הארגומנט nosave
לפקודה:
- shutdown nosave
שים לב שקובץ ה־append-only יכול לגדול במשך זמן רב, אך תוכל להגדיר את רדיס לכתוב מחדש את הקובץ על סמך משתנים מסוימים על ידי עריכת קובץ redis.conf
. תוכל גם להורות לרדיס לכתוב מחדש את קובץ ה־append-only על ידי הרצת הפקודה bgrewriteaof
:
- bgrewriteaof
bgrewriteaof
תיצור את סדרת הפקודות הקצרה ביותר הנדרשת כדי להחזיר את מסד הנתונים למצבו הנוכחי. כפי ששמו של הפקודה מרמז, היא תרוץ ברקע. עם זאת, אם פקודת השמירה האחרת רצה כבר בתהליך רקע, היא תצטרך לסיים לפני שרדיס יבצע את bgrewriteaof
.
מסקנה
מדריך זה מפרט מספר פקודות המשמשות לניהול מסדי נתונים ומפתחות. אם ישנן פקודות, ארגומנטים או פרוצדורות קשורים אחרים שתרצה ללמוד עליהם במדריך זה, אנא שאל או הצע בתגובות.
למידע נוסף על פקודות Redis, בדוק את סדרת המדריכים שלנו על איך לנהל מסד נתונים של Redis.
Source:
https://www.digitalocean.com/community/cheatsheets/how-to-manage-redis-databases-and-keys