PracticU

שימוש ב-Cache ב-NodeJS

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › שימוש ב-Cache ב-NodeJS
מילון מושגים:
מטמון - אחסון זמני ומהיר של נתונים שנדרשים שוב, כדי להאיץ גישה ולהפחית עומס מהמקור המקורי.
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
Postman - כלי לבדיקת API: שליחת בקשות HTTP לשרת ובחינת התגובות, נפוץ בפיתוח ובבדיקות.
תחביר - אוסף הכללים של שפת תכנות הקובעים כיצד לכתוב קוד תקין. הפרתם גורמת לשגיאת תחביר.

שימוש ב-Cache ב-NodeJS
Cache הוא אזור בזיכרון של השרת שמשרת את כל הלקוחות, ושומר מידע שחישובו או שליפתו יקרים כדי שלא יהיה צורך לבצע אותם בכל בקשה. בניגוד ל-session, שהוא פר לקוח, כאן המידע משותף לכולם.
איך זה עובד
1. למה cache: אם כל לקוח שמבקש את המוצר הנמכר ביותר גורם לגישה למסד נתונים ולחישוב, זה עולה זמן. אפשר לחשב פעם ביום, לשמור בזיכרון ולהחזיר משם, כי גישה לזיכרון מהירה בהרבה.
2. התקנה: מתקינים את הספרייה memory-cache ומייבאים אותה עם require.
3. ראוט לדוגמה: ראוט שמחזיר topProduct. בודקים אם הערך קיים ב-cache. אם לא, מדמים שליפה ממסד הנתונים של מוצר (id 1, שם Apple, מחיר 3.5), ומכניסים אותו ל-cache. בסוף מחזירים cache.get של המפתח.
4. הוספה ל-cache: cache.put מקבל מפתח וערך. המפתח הוא שם שאנחנו ממציאים, כמו אוסף של key ו-value.
5. משך שמירה: ללא פרמטר נוסף הערך נשאר כל עוד השרת רץ. הפרמטר השלישי הוא timeout במילי-שניות, למשל אלף כפול 60 כפול 60 כפול 24 ליום אחד.
6. callback בסיום הזמן: פרמטר רביעי הוא פונקציה שנקראת לפני שהערך מוסר, והיא מקבלת את המפתח והערך. אפשר להדפיס הודעה, או למשל לטעון את הערך מחדש מהמסד.
7. בדיקה ב-Postman: אחרי timeout של 5 שניות הערך נוסף פעם אחת, בבקשות הבאות הוא לא נוסף שוב, ואחרי 5 שניות מודפסת הודעה על הסרתו. הבקשה הבאה מוסיפה אותו מחדש.
שימו לב
- תחביר שגוי בהצבה (שימוש ב-= במקום : באובייקט) גרם לשגיאה שנמצאה ותוקנה בהרצאה.
- הערך נמחק כשהשרת יורד מהאוויר, כי ה-cache נמצא בזיכרון.
כך אפשר להחזיק מידע משותף לכל הלקוחות ולחסוך גישות חוזרות לדיסק, לקבצים או למסד נתונים. ההרצאה הבאה מציגה דוגמה אמיתית.
השיעור הבא בקורס: שימוש ב-Cache עבור טבלאות של MySQL

פרקי ההרצאה: שימוש ב-Cache ב-NodeJS

  1. 00:00

    cache משותף לכל הלקוחות

  2. 00:39

    התקנת memory-cache

  3. 01:21

    ראוט top product וגישה לדאטאבייס

  4. 02:13

    שמירה בזיכרון פעם ביום

  5. 02:47

    בדיקה אם הערך קיים ב-cache

  6. 03:48

    הכנסה עם put ושליפה עם get

  7. 04:52

    הרצה ותיקון שגיאה

תמלול ההרצאה: שימוש ב-Cache ב-NodeJS

הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Cache ב-NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:21

    Session בצד של השרת, סיפק מידע פר לקוח, ללקוח יש את ה-Session שלו. Cash זה מידע עבור כל הלקוחות כולם. קודם כל נראה בסרטון הזה איך אנחנו בעצם משתמשים ב-Cash, ואז בסרטון הבא, real-life example to cache.

  3. 00:39

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

  4. 00:53

    בואו נריץ את זה. הנה יש לנו את ההתקנה. אנחנו רוצים לבנות פה למעלה const memory cache ו-require memory cache. עכשיו נבנה כאן איזה ראוט כזה של נניח API אם גולשים לטופ פרודקט ורוצים את המוצר שהוא נחשב המוצר הכי נמכר או הכי פופולרי הוא ה-Response זה הטופ פרודקט שלנו עכשיו קודם כל מה בעצם אני רוצה לעשות

  5. 01:33

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

  6. 01:49

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

  7. 02:12

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

  8. 02:26

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

  9. 02:34

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

  10. 02:54

    אז מה שאנחנו רוצים לעשות זה ראשית לבדוק אם לא קיים ב-cash top product, שוב זה סתם שם מומצא, זה לא חייב להיות אותו השם שכתוב פה כמובן. אם לא קיים לי הערך הזה, ו-collection שיש בו key ו-value, זה ה-key.

  11. 03:17

    אז אנחנו רוצים לגשת לדאטאבייס, אוקיי? get top product from the database. אז אנחנו כרגע, אין צורך שניגש לדאטאבייס, אלא const product = וכרגע אני אעשה הדמיה כאילו הלכתי לדאטאבייס והבאתי את המוצר הזה.

  12. 03:38

    ID 1, name apple ו-price 3.5. נניח שזה ה-top product שלנו. מה שאנחנו רוצים לעשות זה להכניס אותו ל-cash.

  13. 03:53

    אז יש לנו את ה... האמת שזה לא caches, זה memory cache. יש לנו את ה-memory cache, אולי נקרא לו cache, זה יהיה יותר פשוט, למה memory cache?

  14. 04:07

    בואו נקרא לו cache, וזהו. אז אנחנו רוצים לגשת ל-cash, נקודה, ויש לנו פונקציית put, ואנחנו רוצים את ה-key product ואת ה-value top product.

  15. 04:28

    ומכניס אותו לתוך ה-cash. בואו נשים פה console.log top product has been added to the... ולבסוף אנחנו רוצים to return at response.json.cash.get ותביא לי את ה-top product שלך בצורה כזאת.

  16. 05:00

    וסיימנו. יש לנו כאן כרגע טיפול ב-top product ב-cash. בואו נבצע node-app. יש לנו פה שגיאה, לא קרה כלום, בואו נמצא אותה.

  17. 05:13

    ID שווה, אוי אוי אוי, מה פתאום שווה? נקודותיים. בואו נריד שוב.

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: יצירת סל קניות בחנות אונליין ב-NodeJS

ההרצאה הבאה: שימוש ב-Cache עבור טבלאות של MySQL

הרצאות קשורות מקורסים אחרים

  • שימוש ב-Cache - חלק 1
  • Cache object
  • שימוש ב-useEffect - חלק 1
  • שימוש ב-ModelState

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React