בדף הזה מוסבר איך להגדיר ולנטר את שירות memcache לאפליקציה באמצעות מסוף Google Cloud . בנוסף, מוסבר איך להשתמש ב-App Engine memcache Python API כדי להגדיר ולאחזר ערכים ששמורים במטמון, ואיך להשתמש בתכונה compare-and-set כדי לטפל בבקשות כתיבה בו-זמניות לאותו מפתח memcache. כדי לקבל מידע נוסף על memcache, אפשר לקרוא את הסקירה הכללית על memcache.
הגדרת memcache
- עוברים לדף Memcache במסוף Google Cloud .
עוברים לדף Memcache - בוחרים את רמת השירות של memcache שבה רוצים להשתמש:
- משותף (ברירת מחדל) – ללא תשלום, ומספק קיבולת מטמון על בסיס האפשרות הטובה ביותר.
- ייעודי – החיוב הוא לפי GB-שעה של גודל מטמון, והקיבולת של המטמון קבועה ומוקצית באופן בלעדי לאפליקציה שלכם.
מידע נוסף על סוגי השירותים הזמינים מופיע במאמר סקירה כללית על Memcache.
שמירת ערכים במטמון ואחזור שלהם
שמירת ערך במטמון
משתמשים ב-add() כדי להוסיף ערך למפתח אם ורק אם הוא עדיין לא קיים, עם זמן תפוגה אופציונלי:
memcache.add(key="[KEY]", value="[VALUE]", time=[EXPIRATION_TIME])
לדוגמה, כדי להוסיף את הערך raining למפתח weather_USA_98105 עם זמן תפוגה של שעה אחת מהרגע שבו הערך נכתב:
memcache.add(key="weather_USA_98105", value="raining", time=3600)
מידע נוסף על add() ושיטות אחרות להגדרת ערכים זמין במסמכי התיעוד של memcache API בשפת Python.
דוגמאות נוספות לערכי שמירה במטמון מופיעות במאמר דוגמאות ל-Memcache.
חיפוש ערכים במטמון
משתמשים בפונקציה get() כדי לחפש את הערך של מפתח יחיד:
memcache.get(key="[KEY]")
לדוגמה, כדי לקבל את הערך של המפתח weather_USA_98105:
memcache.get(key="weather_USA_98105")
מידע נוסף על get() ועל שיטות אחרות לחיפוש ערכים זמין במסמכי התיעוד של Memcache API בשפת Python.
מעקב אחר memcache במסוף Google Cloud
- עוברים לדף Memcache במסוף Google Cloud .
עוברים לדף Memcache - מעיינים בדוחות הבאים:
- רמת השירות של Memcache: מראה אם האפליקציה שלכם משתמשת ברמת השירות Shared או Dedicated. אם אתם הבעלים של הפרויקט, אתם יכולים לעבור בין שתי רמות השירות. מידע נוסף על רמות השירות
- שיעור ההיטים: בקטע הזה מוצג אחוז בקשות הנתונים שסופקו מהמטמון, וגם המספר הגולמי של בקשות הנתונים שסופקו מהמטמון.
- פריטים במטמון.
- הגיל של הפריט הכי ישן: הגיל של הפריט הכי ישן במטמון. שימו לב: הגיל של פריט מתאפס בכל פעם שמשתמשים בו, בין אם קוראים אותו או כותבים בו.
- גודל המטמון הכולל.
אפשר לבצע את הפעולות הבאות:
- מפתח חדש: הוספת מפתח חדש למטמון.
- חיפוש מפתח: אחזור מפתח קיים.
- ניקוי המטמון: הסרת כל צמדי המפתח/ערך מהמטמון.
(רק ב-memcache ייעודי) מעיינים ברשימה של מקשי קיצור.
- 'מפתחות חמים' הם מפתחות שמקבלים יותר מ-100 שאילתות לשנייה (QPS) ב-memcache.
- הרשימה הזו כוללת עד 100 מקשי קיצור, ממוינים לפי QPS הכי גבוה.
טיפול בכתיבות בו-זמניות
כדי להשתמש בתכונה compare and set (השוואה והגדרה) לטיפול בפעולות כתיבה מכמה בקשות לאותו מפתח memcache:
- יוצרים מופע של אובייקט memcache
Client. - משתמשים בלולאת ניסיון חוזר (רצוי עם הגבלה על מספר הניסיונות החוזרים ועם שימוש בהשהיה מעריכית לפני ניסיון חוזר)
- בתוך לולאת הניסיון החוזר, מקבלים את המפתח באמצעות
gets()אוget_multi()עם הפרמטרfor_casשמוגדר ל-True. - בתוך לולאת הניסיון החוזר, מעדכנים את ערך המפתח באמצעות
cas()אוcas_multi().
- בתוך לולאת הניסיון החוזר, מקבלים את המפתח באמצעות
בקטע הקוד הבא אפשר לראות דרך אחת להשתמש בתכונה compare and set:
def bump_counter(key):
client = memcache.Client()
while True: # Retry loop
counter = client.gets(key)
if counter is None: raise KeyError('Uninitialized counter')
if client.cas(key, counter+1):
break
לולאת הניסיון החוזר נחוצה כי בלי הלולאה הקוד הזה לא באמת מונע תנאי מירוץ, הוא רק מזהה אותם. שירות memcache מבטיח שאם משתמשים בו בדפוס שמוצג כאן (כלומר, באמצעות gets() ו-cas()), ואם שני מופעים שונים של לקוח (או יותר) מעורבים בתנאי מירוץ, רק המופע הראשון שמבצע את הפעולה cas() מצליח (מחזיר True), ואילו המופע השני (ומופעים נוספים) נכשל (מחזיר False).
שיפור נוסף שכדאי להוסיף לקוד לדוגמה הזה הוא הגבלת מספר הניסיונות החוזרים, כדי למנוע לולאה אינסופית בתרחישים של המקרה הגרוע ביותר, שבהם יש הרבה התנגשויות לגבי אותו מונה. דוגמה למצב שבו עלול להתרחש עימות כזה היא אם יש יותר בקשות שמנסות לעדכן את הדלפק מכמות הבקשות ששירות memcache יכול לעבד בזמן אמת.
מידע נוסף על הפקודות compare ו-set זמין במאמר סקירה כללית על Memcache.
המאמרים הבאים
- מידע נוסף על memcache זמין במאמר סקירה כללית על Memcache.
- דוגמאות קוד לשימוש ב-memcache ב-Python מופיעות במאמר דוגמאות ל-memcache.