איך לאתר בעיות ב־Redis

הקדמה

Redis הוא מאגר נתונים בקרה על-פי ערכים בזיכרון מתוך המקור הפתוח. הוא מגיע עם מספר פקודות שיכולות לעזור באיתור ותיקון בעיות. בגלל הייחוד של Redis כמאגר נתונים בזיכרון, רוב הפקודות מתמקדות בניהול הזיכרון, אך יש גם פקודות אחרות שיכולות לספק תמצית על מצב השרת שלך. המדריך הזה יספק פרטים על איך להשתמש בכמה מהפקודות הללו כדי לעזור באבחון ופתרון בעיות שעלולות להתרחש במהלך השימוש ב-Redis.

איך להשתמש במדריך זה

המדריך הזה כתוב כמפת עזר עם דוגמאות עצמאיות. אנו ממליצים לך לעבור לכל סעיף שקשור למשימה שאתה מנסה להשלים.

הפקודות שמוצגות במדריך זה נבדקו על שרת Ubuntu 22.04 המריץ את גרסת Redis 6.0.16. כדי להתקין סביבה דומה, תוכל לעקוב אחר שלב 1 של המדריך שלנו על איך להתקין ולאבטח את Redis על Ubuntu 22.04. נדגים איך הפקודות האלו מתנהגות על ידי הרצתן באמצעות redis-cli, ממשק השורת פקודה של Redis. אם אתה משתמש בממשק Redis שונה — לדוגמה, Redli — יתכן שפלט מסוים של פקודות מסוימות ישתנה.

באפשרותך גם לספק מופע מנוהל של מסד נתונים Redis לבדיקת הפקודות הללו, אך בהתאם לרמת השליטה המותרת על ידי ספק מסד הנתונים שלך, ייתכן שקצת הפקודות במדריך זה לא יעבדו כפי שתוארו. כדי לספק מסד נתונים מנוהל של DigitalOcean, עקוב אחר תיעוד המוצר של מסדי הנתונים המנוהלים שלנו. לאחר מכן, עליך להתקין את Redli או להגדיר טונל TLS כדי להתחבר למסד הנתונים המנוהל באמצעות TLS.

שימוש בזיכרון מציין כמה זיכרון משמש כרגע על ידי מפתח יחיד. הוא מקבל את שם המפתח כארגומנט ומחזיר את מספר הבתים שהוא משתמש בהם. תחילה, הגדר משתנה לדוגמה:

  1. set key_meaningOfLife "Food"

לאחר מכן, בדוק את הזיכרון עם שימוש בזיכרון:

  1. memory usage key_meaningOfLife
Output
(integer) 88

להבנה כללית יותר של כיצד השרת שלך של Redis משתמש בזיכרון, תוכל להפעיל את הפקודה סטטיסטיקות זיכרון:

  1. memory stats

הפקודה הזו מחזירה מערך של מדדים הקשורים לזיכרון וערכיהם. הנה המדדים שמדווחים על ידי סטטיסטיקות זיכרון:

  • peak.allocated: מספר הבתים המרבי שנצרכו על ידי Redis
  • total.allocated: מספר כללי של הבתים שהוקצו על ידי Redis
  • startup.allocated: מספר הבתים ההתחלתי שנצרכו על ידי Redis בהפעלה
  • replication.backlog: גודל הרשומה לשטח, בבתים
  • clients.slaves: סה"כ גודל ההוצאות של כל עותק על, הכוונה לפלט ולתוך תקיות השאילתה וההתחברות
  • clients.normal: סה"כ גודל ההוצאות של כל הלקוחות
  • aof.buffer: סה"כ גודל התקייה הנוכחית ושוב קובץ התוספת הבלעדי buffers
  • db.0: ההוצאות של המילונים הראשיים והתפוגה של כל בסיס נתונים בשימוש בשרת, דוחות בבתים
  • overhead.total: סך כל ההוצאות המשמשות לניהול של מרחב המפתחות של Redis
  • keys.count: סה"כ מספר המפתחות המאוחסנים בכל בסיסי הנתונים בשרת
  • keys.bytes-per-key: יחס בין שימוש הזיכרון הנטו של השרת ובין keys.count
  • dataset.bytes: גודל הסט נתונים, בבתים
  • dataset.percentage: האחוז של שימוש הזיכרון הנטו של Redis שנלקח מתוך dataset.bytes
  • peak.percentage: האחוז של peak.allocated שנלקח מתוך total.allocated
  • פיצוץ: היחס בין כמות הזיכרון שנמצאת בשימוש כרגע לבין הזיכרון הפיזי ש Redis באמת משתמש בו.

זיכרון malloc-stats מספק דוח סטטיסטי פנימי מ־jemalloc, מאזן הזיכרון שבו משתמש Redis במערכות Linux:

  1. memory malloc-stats

אם נראה שיש לך בעיות קשורות לזיכרון, אך ניתן לראות שנתוני הפלט של הפקודות הקודמות אינם מועילים, ניתן לנסות להריץ memory doctor:

  1. memory doctor

תכונה זו תעזור להדפיס כל בעיות צריכת זיכרון שנמצאות ותציע פתרונות אפשריים.

קבלת מידע כללי על מופע Redis שלך

A debugging command that isn’t directly related to memory management is monitor. This command allows you to review a constant stream of every command processed by the Redis server:

  1. monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

פקודה נוספת שימושית לצורך ניפוי הוא info, שמחזירה מספר בלוקים של מידע וסטטיסטיקות על השרת:

  1. info
Output
# Server redis_version:6.0.16 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:a3fdef44459b3ad6 redis_mode:standalone os:Linux 5.15.0-41-generic x86_64 . . .

פקודה זו מחזירה המון מידע. אם ברצונך להחזיר רק בלוק מידע אחד, ניתן לציין אותו כארגומנט ל־info:

  1. info CPU
Output
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04

שים לב שהמידע שמוחזר על ידי הפקודה info יתנהג בהתאם לגרסת Redis שאתה משתמש בה.

שימוש בפקודת keys

הפקודה keys מועילה במקרים בהם שכחת את שם המפתח, או אולי יצרת אחד אך טעית בכתיב של שמו. keys מחפשת מפתחות המתאימים לתבנית:

  1. keys pattern

תמיכה במשתנים בסגנון גלוב מתבצעת על ידי:

  • ? הוא תו כללי שעומד במקום תו יחיד כלשהו, לכן s?mmy מתאים ל־sammy, sommy, ו־sqmmy
  • * הוא תו כללי שעומד במקום כל מספר של תווים, כולל אפילו אף תו, לכן sa*y מתאים ל־sammy, say, sammmmmmy, ו־salmony
  • ניתן לציין שני או יותר תווים שהתבנית יכולה לכלול על ידי לסגור אותם בסוגריים מרובעים, לכן s[ai]mmy יתאים ל־sammy ו־simmy, אך לא ל־summy
  • כדי להגדיר תו כללי שמתעלם מאות או יותר, יש לסגור אותם בסוגריים מרובעים ולפנות אותם בסירה (^), לכן s[^oi]mmy יתאים ל־sammy ו־sxmmy, אך לא ל־sommy או ל־simmy
  • כדי להגדיר תו כללי שכולל טווח של אותיות, יש להפריד את תחילת וסופו של הטווח במקף ולסגור אותו בסוגריים מרובעים, לכן s[a-o]mmy יתאים ל־sammy, skmmy, ו־sommy, אך לא ל־srmmy

אזהרה: מדריך ה־Redis מזהיר כי על keys לא ישתמש בסביבת ייצור מסובכת כמעט אף פעם מאחר שיכול להיות לו השפעה שלילית גדולה על הביצועים.

סיכום

מדריך זה מפרט מספר פקודות שימושיות לפתירת בעיות ולטיפול בהן שעשויות להתעורר בעת העבודה עם Redis. אם ישנם פקודות נוספות, ארגומנטים או פרוצדורות קשורים אחרים שתרצה ללמוד עליהם במדריך זה, אנא שאל או הצעות בתגובות.

למידע נוסף על פקודות Redis, ניתן לבדוק את סדרת המדריכים שלנו על איך לנהל מסד נתונים של Redis.

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis