Redis GETEX

Redis Getex



Redis הוא מאגר נתונים של ערך מפתח המשמש כמטמון בזיכרון, מסד נתונים, סדרת זמן, מנוע זרימה, מתווך הודעות וכו'. מכיוון שמאגר הנתונים של Redis משתמש בפורמט פשוט של זוג מפתח-ערך כדי להחזיק נתונים, זה מאוד זיכרון יָעִיל. בנוסף, מהירות השאילתה גבוהה מאוד עם מורכבויות זמן נמוכות כמו O(1) ו-O(log(N)). מפתחות Redis יכולים להכיל מבני נתונים שונים, כגון מחרוזות, סטים, hashes, סטים ממוינים ורשימות.

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







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



TTL של מפתח Redis

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



פקודת GETEX

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





מפתח GETEX [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | להתמיד ]

מַפְתֵחַ: זהו המפתח שמצביע על ערך מחרוזת.

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



לְשֶׁעָבַר: זה יקבע את זמן התפוגה בשניות עבור מפתח נתון.

PX: ערך הזמן הקצוב של המפתח יוגדר באלפיות שניות.

בנוסף, אנו יכולים לציין ערך חותמת זמן של UNIX בשניות או אלפיות שניות באמצעות אפשרויות הפקודה הבאות EXAT ו PXAT :

EXAT: זמן התפוגה יוגדר בפורמט חותמת זמן UNIX, וחותמת הזמן תהיה בשניות.

PXAT: פסק הזמן עבור מפתח Redis נתון יוגדר כחותמת זמן של UNIX באלפיות שניות.

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

הפקודה GETEX מחזירה את הערך של המפתח שצוין. פקודה זו פועלת רק עם ערכים מסוג מחרוזת אך לא עם hashes, רשימות, סטים ממוינים וכו'. אם תציין מפתח המשויך לערך שאינו מחרוזת, הפקודה תחזיר שגיאה. בנוסף, אם המפתח כבר פג או לא קיים, הפקודה תחזור אֶפֶס.

בסעיף הבא, נסקור את השימוש המעשי בפקודת GETEX.

מקרה שימוש - קישור איפוס זמני או יצירת קוד PIN עבור שחזור סיסמא/OTP

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

נניח שמשתמש עם user_id 1000 מבקש שחזור סיסמה. אז, ניתן לאחסן את כתובת האתר לשחזור במפתח RecoveryURL:UserID:1000 . אנו יכולים להשתמש בפקודה SET כדי לאחסן את כתובת האתר לשחזור באופן הבא:

מַעֲרֶכֶת RecoveryURL:UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

בוא נבדוק אם כתובת האתר של המחרוזת מאוחסנת כהלכה במפתח RecoveryURL:UserID:1000. אנו יכולים להשתמש בפקודה GETEX באופן הבא:

getex RecoveryURL:UserID: 1000

הפלט של הפקודה הקודמת מוצג בקטע הבא:

אם השתמשנו בפקודה GET במקום בפקודה GETEX, הפלט יהיה זהה.

בואו נשתמש בפקודה TTL כדי לבדוק אם זמן תפוגה משויך למפתח זה.

URL שחזור Ttl: מזהה משתמש: 1000

כצפוי, ה-1 הוחזר על ידי פקודת TTL, מה שאומר שאין זמן תפוגה משויך למפתח שצוין.

לפי דוגמה זו, חברת האירוח צריכה להגדיר פסק זמן של 5 דקות עבור כתובת האתר לשחזור. אז, אנחנו נשתמש ב- לְשֶׁעָבַר אפשרות פקודה. מכיוון ש-5 דקות הן 300 שניות, אנו יכולים לבנות את הפקודה GETEX באופן הבא:

getex RecoveryURL:UserID: 1000 לְשֶׁעָבַר 500

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

כצפוי, הזמן הולך ופוחת, ובסופו של דבר, ה RecoveryURL:UserID:1000 המפתח יוסר. להלן הפלט לאחר 5 דקות:

ה-2 הוחזר על ידי הפקודה, מה שאומר שהמפתח פג ונמחק ממאגר הנתונים.

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

בואו ניצור מפתח לדוגמה נוסף ונקצה לו ערך מחרוזת. במקרה זה, נציין את ערך ה-TTL באלפיות שניות על ידי העברת ה- PX אוֹפְּצִיָה.

מַעֲרֶכֶת KeytoTestPersist 'תוקפו של זה יפוג תוך 60 שניות' PX 50000

לאחר מכן, נבדוק את הזמן הנותר באופן הבא:

כצפוי, ה-TTL יורד. בואו נקרא לפקודת GETEX עם האפשרות PERSIST באופן הבא:

getex KeytoTestPersist נמשך

באופן אידיאלי, זה יסיר את ה-TTL המשויך למפתח זה. בואו נבדוק את ה-TTL עבור המפתח KeytoTestPersist.

הפקודה TTL החזירה את ה-1, כלומר אין TTL משויך למפתח KeytoTestPersist.

באופן דומה, ה GETEX ניתן להשתמש בפקודה כדי להגדיר את זמן התפוגה עבור מפתחות בחותמת זמן של UNIX.

סיכום

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