Redis XTRIM

Redis Xtrim



פרטים ברמה נמוכה של Redis Streams

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

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









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



פקודת XTRIM

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





XTRIM stream_key MAXLEN | MINID [ = | ~ ] ערך סף [ ספירת LIMIT ]

key_stream : המפתח של זרם Redis.

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

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

= מפעיל : כאשר צוין, יתבצע חיתוך מדויק בהתבסס על ערך הסף.

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

ערך סף : ערך הסף המבוסס על הארגומנט MAXLEN או MINID.

ספירת LIMIT : המספר המרבי של ערכים שיש להסיר.

מקרה שימוש 01 - הסרת ערכי זרם על סמך אורך מקסימלי

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

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

xadd touristinfo * שם ג'ק קאנטרי איטליה משפחה מזכרים 5
xadd touristinfo * שם הארי קאנטרי ארה'ב משפחה מזכרים שתיים
xadd touristinfo * שם nikomita country japan familymems 3
xadd touristinfo * שם משפחת זקריה מדינה הודו שתיים
xadd touristinfo * שם משפחת רדמונד קאנטרי ברזיל 6
xadd touristinfo * שם נמצא מדינה יפן משפחתית 3
xadd touristinfo * שם מרי ג'ון מדינה ארה'ב משפחה שתיים
xadd touristinfo * שם ליזה מדינה איטליה משפחה 5
xadd touristinfo * שם נימשיקה מדינה יפן משפחתית 3
xadd touristinfo * שם נישה מדינה איטליה משפחה 5

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

xrange touristinfo - +

תְפוּקָה:

כצפוי, 10 ערכי הזרם הוצגו על ידי פקודה זו.

למטרות הדגמה, נקצץ את הנחל כאשר אורכו המרבי יהיה 5.

xtrim touristinfo maxlen 5

בואו נבדוק שוב את ערכי הזרם עם הפקודה XRANGE.

כצפוי, חמישה ערכים פונו מהנחל, ואורכו 5.

מקרה שימוש 02 - הסרת ערכי זרם על סמך מזהי זרם

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

ראשית, ניצור זרם בשם weatherinfo ונוסיף לו 5 ערכים באופן הבא.

xadd מידע על מזג האוויר * טמפ' 10 לחות חמישים
xadd מידע על מזג האוויר * טמפ' עשרים לחות 70
xadd מידע על מזג האוויר * טמפ' 12 לחות 65
xadd מידע על מזג האוויר * טמפ' חֲמֵשׁ עֶשׂרֵה לחות 88
xadd מידע על מזג האוויר * טמפ' 18 לחות ארבע חמש

תְפוּקָה:

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

xtrim weatherinfo MINID 1660485503248 - 0

המזהה המינימלי שצוין משויך לערך השלישי. לפיכך, הערכים לאחר הערך השלישי שיש להם מזהים נמוכים יותר יימחקו.

תְפוּקָה:

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

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

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

סיכום

בקיצור, הפקודה XTRIM משמשת להסרת ערכי זרם על סמך ערך סף. ניתן לשנות את סוג ערך הסף עם ההקשר שצוין באמצעות הארגומנטים MAXLEN ו-MINID. כפי שפורט, ניתן לבצע את הגזם בשתי דרכים כאשר פעולת הגזירה תחשב את הסף כגבול מדויק או משוער. כברירת מחדל, הפקודה משתמשת באופרטור = המשמש לחיתוך מדויק. עם האופרטור ~, אתה יכול לבצע חיתוך משוער כפי שהוזכר בסעיף לעיל. בסך הכל, גישת החיתוך המשוער והארגומנט LIMIT עוזרים לך להשיג רווח ניכר בביצועים עם פקודת XTRIM.